SwiftUI:如何获取设备的宽度?

时间:2019-11-22 17:00:59

标签: ios swift swiftui

我试图仅在Text()视图的左侧和右侧添加填充。理想情况下,我想将其宽度设置为等于设备的宽度减去我定义的常数。

例如:

Text("My text view here")
   .frame(width: device.width - 16)

在SwiftUI中执行此操作的正确方法是什么?我是用错误的方式来处理这个问题吗?

3 个答案:

答案 0 :(得分:1)

SwiftUI标准方式

GeometryReader是为您提供有关父view

的所有信息的类型

因此您可以像使用GeometryReader

    var body: some View {
        GeometryReader { geometry in
            Text("My text view here")
                .frame(width: geometry.size.width - 16)
                .background(Color.red) // This is just to see how it looks like
        }
    }

UIKit积极进取的方式

您可以直接从设备上获取它:

    var body: some View {
        Text("My text view here")
            .frame(width: UIScreen.main.bounds.width - 16)
            .background(Color.red) // This is just to see how it looks like
    }

请注意设备的宽度是物理宽度,并且不是在旋转时会更新。另外,我还没有尝试过用它来观察自己,但是我已经阅读了 UIScreen SplitView 上遇到了问题。

答案 1 :(得分:0)

实现同一目标的另一种方法是.padding(.horizontal, 16)

答案 2 :(得分:0)

尝试将框架设置为屏幕的整个宽度(maxWidth:.infinity),然后添加水平填充。

Text("My text view here")
        .frame(maxWidth: .infinity)
        .padding(.horizontal, 16)