【问题标题】:SwiftUI coordinate spaceSwiftUI 坐标空间
【发布时间】:2019-10-19 23:03:06
【问题描述】:

有谁知道 SwiftUI 在坐标空间方面是如何渲染的?现在看起来框架的原点不在左上角的0, 0。例如,添加带有修饰符的Text 会使标签偏移到视图之外。

var body: some View {
    Text("my long enough string")
      .position(CGPoint(x: 0, y: 100))
}

结果是我只能看到“ugh string”。

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    .position(x, y) 将视图的中心定位到与父级的指定坐标。

    您将需要使用 Stacks/Container 使用对齐和间隔来相对于彼此定位显示的元素。

    视图总是从屏幕中心开始。

    类似这样的:

       HStack(alignment: .top) {
            VStack(alignment: .leading) {
                Text("top left")
                Spacer()
                Text("bottom left")
            }
    
            Spacer()
            VStack(alignment: .leading) {
                Text("top right")
                Spacer()
                Text("bottom right")
            }
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用“填充”代替位置。

      Text("Hello World").padding(EdgeInsets.init(top: 100, leading: 0, bottom: 0, trailing: 0))
      

      【讨论】:

      • 这也会插入背景颜色
      【解决方案3】:

      根据the documentation of the function position(x:y:)

      • x:放置此视图中心的 x 坐标。
      • y:放置此视图中心的 y 坐标。

      这会将文本的中心固定在超级视图的中心。

      你也可以使用the padding() function:

      Text("my long enough string").padding(.top, 20)
      

      【讨论】:

        【解决方案4】:

        iOS 上的坐标空间有 0, 0 在左上角。您的文本被截断,因为 position 属性:“在其父坐标空间中的指定点修复此视图的 center。”

        【讨论】:

        • 那么您将如何将视图定位在(0, 100)
        【解决方案5】:

        您还可以使用.offset 修饰符将视图相对于左上角偏移。如果您使用它,请注意,根据修饰符的顺序,效果可能会大不相同。

        【讨论】:

          【解决方案6】:

          将此视图的中心固定在其父坐标空间中的指定点。

          【讨论】:

            猜你喜欢
            • 2019-11-22
            • 1970-01-01
            • 2011-09-02
            • 1970-01-01
            • 2014-05-21
            • 2011-08-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多