在 watchOS 上使用 SwiftUI,如何将视图与导航标题对齐?

Using SwiftUI on watchOS, how to align views to the navigation title?

我想将一些内容与导航标题使用的相同插图对齐。

在较旧的手表设备上,没有插图,但在带有圆角的较新设备上,标题是插图,对于某些事情我想对齐到相同的插图。

apple docs 讲了这个margin,但是我不知道怎么用

如何修改此示例以使文本和按钮的左边缘与导航标题对齐?

    var body: some View {
        VStack(alignment: .leading) {
            Text("Hello World")
            Button("Test") {}
        }
        .navigationTitle("Title")
    }

前导填充很简单(在 VStack 上):

        .padding(.leading, 9.5)

但是你必须根据手表型号来做。 以下是如何确定手表型号的示例:

您可能希望将它放在条件视图修饰符中:

您可以使用当前屏幕宽度:

 var screenWidth = WKInterfaceDevice.current().screenBounds.width

并将其(减去所需的边距)作为帧宽度应用于您的 VStack:

 VStack(alignment: .leading){
    
     Text("Hello World")
     Button("Test") {}
 }
 .frame(width: screenWidth - 25)
 .navigationTitle("Title")

这在 45mm 和 40mm 上运行良好,但不幸的是在 38mm 手表上仍然不尽如人意,因此您可能希望为较小的设备明确设置不同的 paddings/frames。

使用.scenePadding(.horizontal)。这将自动在较大的手表上应用您想要的填充。文档:https://developer.apple.com/documentation/swiftui/menu/scenepadding(_:)