【问题标题】:SwiftUI changing the position of a view programmaticallySwiftUI 以编程方式更改视图的位置
【发布时间】:2020-04-11 15:04:34
【问题描述】:

Swift 5、iOS 13

一个 SwiftUI 问题

我想在创建视图时记录它的位置。 我想保存位置,因为如果我按下重置按钮,我希望能够将它移回那里。 有问题的视图是可拖动的。 我可以在创建几何阅读器时使用它来获取它的坐标,并使用 .appear 属性对其进行设置。 我可以使用 position 属性将其放置在 X 点。

但是如果我使用这个位置,我需要给它坐标。如果我给它坐标,我就不能使用像 HStack 这样理智的东西来放置它。我需要第一次运行时忽略位置属性,然后每次都应用它。

感觉就像鸡和蛋的问题。有没有人解决这个问题?一个疯狂的想法,我可以使用偏移量吗?

【问题讨论】:

  • 你会在代码中展示你的尝试吗?

标签: ios swift view swiftui


【解决方案1】:

对我来说,你对使用 .offset(x:y:) 修饰符的疯狂猜测似乎让你走上了正确的道路。

.onAppear{} 中相关视图的 GeometryReader 代理获取位置,并使用 .offset 恢复它。

我的这个较早的答案只使用 x 轴,应该很容易将其应用于 y 轴:https://stackoverflow.com/a/60854527/301790

如果您需要更多指导,请考虑发布可复制粘贴到 Xcode 中的代码。

【讨论】:

  • 是的,感谢您的确认。事实上,我有数据。我使用偏移量来存储拖动值,我需要做的就是重置它,然后一切都回到原来的位置,这次不需要几何阅读器,但接下来。
【解决方案2】:

这里是一个 UIButton 的代码示例

 Button(action: {
        //Here what you want to do on button click:
 }) {
 HStack {
 Spacer()
 Text("Scores")
 Spacer()
 }
 }.frame(width: 90, height: 45, alignment: .center)
           .foregroundColor(Color.white)
           .background(Color.black)
           .contentShape(Rectangle())
           .padding(EdgeInsets(top: 16, leading: 
            UIScreen.main.bounds.size.width - 110 , bottom: 16, trailing: 20))

UIScreen.main.bounds.size.width 是获取屏幕宽度,然后您可以从中减去按钮宽度以将其调整到右上角。 如附图所示:

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多