Text() 和 .navigationBarTitle() 具有不同的左边距

问题描述 投票:0回答:1

在此代码中,Text("Text 2") 到屏幕左侧的边距比 .navigationBarTitle("Text 1") 更小。适用于 iPhone 15 Pro Max。

如何对齐左边距以使它们相同?

Screenshot

如果您在尺寸较小的 iPhone SE (Xcode) 上检查此代码,边距大致相同,但它不断变化。

非常感谢您的帮助!

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationStack {
            VStack {
                HStack {
                    Text("Text 2")
                    Spacer()
                }
                Spacer()
            }
            .padding(.horizontal)
            .navigationBarTitle("Text 1")
        }
    }
}
swiftui swiftui-navigationstack
1个回答
0
投票

导航标题有自己的样式和定位。 iPhone 15 和 iPhone SE 上的默认左边距似乎是 16pt。

NavigationStack
中的内容通常会占据整个屏幕宽度。您已将
.padding()
应用于您的
VStack
,因此这就是为什么您的较小文本具有您所看到的边距。但正如 Sweeper 在评论中所说,没有理由让这个(未指定的)填充应该与导航标题的(原生)边距相匹配。

您可以通过指定水平填充的大小(至少基于当前设备和 iOS 版本)使其在 iPhone 上更加一致地工作:

NavigationStack {
    VStack {
        // ...
    }
    .padding(.horizontal, 16) // 👈 HERE
    .navigationBarTitle("Text 1")
}

不幸的是,这在 iPad 上效果不太好,因为 iPad 上标题的原生边距似乎更大。因此,使用这种方法,您可能必须考虑使填充取决于设备尺寸。

如果您想确保标题始终与内容对齐,那么您最好用您自己的自定义标题替换本机导航标题。 更改 SwiftUI 中的 NavigationStack 标题字体、色调和背景的答案显示了如何完成此操作。

© www.soinside.com 2019 - 2024. All rights reserved.