在SwiftUI中如何将导航栏标题居中?
var body: some View {
NavigationView {
.navigationBarTitle("Todo Lists")
}
}
.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) } }
此外,这里展示了一个很棒的方法(链接)。
当你需要自定义导航栏时,它是完美的。关键字.principal
用于定位。
NavigationView {
Text("Hello, SwiftUI!")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .principal) {
HStack {
Image(systemName: "sun.min.fill")
Text("Title").font(.headline)
}
}
}
}
您无法更改标题中的文本格式。但是这里有一个解决方法,它将按要求工作(没有大间隔):
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)
}
这是一个选项。使用“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)))
}
}