如何将SwiftUI的navigationBarTitle居中对齐?

15

在SwiftUI中如何将导航栏标题居中?

var body: some View {
    NavigationView {
        .navigationBarTitle("Todo Lists")
    }
}
4个回答

22

.navigationBarTitle 允许三种显示模式 - .large.inline.automatic

从文档中得知:

case automatic
继承上一个导航项的显示模式。
case inline

在导航栏的标准范围内显示标题。

case large

在扩展的导航栏中显示一个大标题。

所以,当您说“如何在SwiftUI中居中导航栏标题”时,这取决于您的意思。如果导航栏标题的显示模式为.large,则不能将其居中。如果导航栏标题的显示模式为.inline,则也不能左对齐或右对齐。如果需要居中的导航栏标题,则您唯一的选择是使用.inline

var body: some View {
    NavigationView {
        CustomView()
            .navigationBarTitle("Todo Lists", displayMode: .inline)
    }
}

19

此外,这里展示了一个很棒的方法(链接)

当你需要自定义导航栏时,它是完美的。关键字.principal用于定位。

NavigationView {
    Text("Hello, SwiftUI!")
        .navigationBarTitleDisplayMode(.inline)
        .toolbar {
            ToolbarItem(placement: .principal) {
                HStack {
                    Image(systemName: "sun.min.fill")
                    Text("Title").font(.headline)
                }
            }
        }
}

2
最佳答案,这个方法非常有效!谢谢。 - Alexander Rojas
1
这里有一个很棒的答案,尽管我错过了ToobarItem(placement: ......),因为我一直在遇到错误。我通过HStack{...}方法成功地在.toolbar {...}中实现了这种方法,我把我的文本放在了我想要的位置! - David_2877

2

您无法更改标题中的文本格式。但是这里有一个解决方法,它将按要求工作(没有大间隔):

HStack{
    Text("Todo Lists")
}
.multilineTextAlignment(.center)
.font(.largeTitle)
.padding(.bottom, -15.0)
NavigationView{
    List{
        ForEach(instrNewOld) { instrIdx in
            SourceCodeView(cat: instrIdx)
        }
    }
    .navigationBarTitle(Text("no text"), displayMode: .automatic)
    .navigationBarHidden(true)
}

0

这是一个选项。使用“navigationBarHidden(true)”唯一的缺点是它会在图像和表格视图之间创建一个大间隙。

struct ContentView: View{
var body: some View {
            VStack
            {
                CircleImageView()
                HeadLineView()
                NavigationView
                {
                        List
                        {
                            Text("Line 1")
                            Text("Line 2")
                        }
                        .navigationBarHidden(true)
                }
            }
        }
    }

struct HeadLineView : View
{
    var body: some View{
        Text("Headline").bold().font(Font(UIFont.systemFont(ofSize: 30.0)))
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接