【问题标题】:How to change the height of the object by using DragGesture in SwiftUI?如何在 SwiftUI 中使用 DragGesture 更改对象的高度?
【发布时间】:2021-01-22 14:17:37
【问题描述】:

我正在尝试通过使用“dragger”(圆角灰色矩形)元素来增加形状的高度。我使用 SwiftUI 提供的 DragGesture 助手来获取用户手指的当前位置。不幸的是,在拖动事件期间,由于某种原因,内容正在跳跃。

您能帮我找出问题的根本原因吗?

这是拖动事件期间的外观

如果我删除 Spacer() 一切正常,但不是我想要的

这是我的代码 sn-ps

import SwiftUI

struct ContentView: View {
  
  var body: some View {
    VStack {
      CustomDraggableComponent()
      
      Spacer() // If comment this line the result will be as on the bottom GIF example
    }
}
import SwiftUI

let MIN_HEIGHT = 50

struct CustomDraggableComponent: View {
  @State var height: CGFloat = MIN_HEIGHT
  
  var body: some View {
    VStack {
      Rectangle()
        .fill(Color.red)
        .frame(width: .infinity, height: height)
      
      HStack {
        Spacer()
        Rectangle()
          .fill(Color.gray)
          .frame(width: 100, height: 10)
          .cornerRadius(10)
          .gesture(
            DragGesture()
              .onChanged { value in
                height = value.translation.height + MIN_HEIGHT
              }
          )
        Spacer()
      }
    }
}

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    正确的计算是

    .gesture(
        DragGesture()
            .onChanged { value in
                height = max(MIN_HEIGHT, height + value.translation.height)
            }
    )
    

    另外,删除无限宽度。无效。

    .frame(minHeight: 0, maxHeight: height)
    
    or 
    
    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: height)
    

    【讨论】:

    • 谢谢,问题出在height 属性中。我算错了
    • 我也想实现类似的功能。请告诉你要修复什么。
    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多