在 SwiftUI 中,.navigationBarItems 是一种早期的 API,用于在 NavigationView 的导航栏中添加按钮或其他内容。这种方法可以为导航栏的左右两侧分别指定内容,通过 leading 和 trailing 参数控制布局。
SwiftUI 从 iOS 14 开始引入的更灵活和现代的工具栏配置方式toolbar。
navigationBarItems简介
在 SwiftUI 中,.navigationBarItems 是一种早期的 API,用于在 NavigationView 的导航栏中添加按钮或其他内容。这种方法可以为导航栏的左右两侧分别指定内容,通过 leading 和 trailing 参数控制布局。
语法
.navigationBarItems(leading: View, trailing: View)
leading:导航栏左侧的内容。
trailing:导航栏右侧的内容。
使用示例
基本用法
在 NavigationView 中添加左右按钮:
NavigationView {
Text("Hello, NavigationBarItems!")
.navigationTitle("Example")
.navigationBarItems(
leading: Button(action: {
print("Leading button tapped")
}) {
Text("Back")
},
trailing: Button(action: {
print("Trailing button tapped")
}) {
Image(systemName: "gear")
}
)
}
效果
左侧(leading):显示一个带有 “Back” 的按钮。
右侧(trailing):显示一个齿轮图标按钮。
仅设置一侧的内容
如果只需要在导航栏的一侧显示内容,可以将另一个参数留空:
.navigationBarItems(
leading: Button("Menu") {
print("Menu tapped")
},
trailing: EmptyView() // 不需要时使用 EmptyView()
)
或者更简单地省略未使用的参数:
.navigationBarItems(trailing: Button(action: {
print("Settings tapped")
}) {
Image(systemName: "gear")
})
自定义复杂内容
导航栏按钮不仅限于简单的文本或图标,可以将自定义视图作为内容:
.navigationBarItems(
leading: HStack {
Image(systemName: "person")
Text("Profile")
},
trailing: HStack {
Button("Add") {
print("Add tapped")
}
Button("Edit") {
print("Edit tapped")
}
}
)
动态导航栏项
可以使用状态变量动态调整导航栏内容:
struct DynamicNavigationBarItems: View {
@State private var isEditing = false
var body: some View {
NavigationView {
Text(isEditing ? "Editing Mode" : "View Mode")
.navigationTitle("Dynamic Items")
.navigationBarItems(
trailing: Button(action: {
isEditing.toggle()
}) {
Text(isEditing ? "Done" : "Edit")
}
)
}
}
}
过渡到 .toolbar
从 iOS 14 开始,Apple 引入了 .toolbar,它是 .navigationBarItems 的增强版,提供了更灵活的功能。如果可能,建议在新项目中使用 .toolbar 代替 .navigationBarItems。
迁移示例:
将 .navigationBarItems 替换为 .toolbar:
// 使用 .navigationBarItems
.navigationBarItems(
leading: Button("Back") {
print("Back tapped")
},
trailing: Button(action: {
print("Settings tapped")
}) {
Image(systemName: "gear")
}
)
// 替换为 .toolbar
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Back") {
print("Back tapped")
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
print("Settings tapped")
}) {
Image(systemName: "gear")
}
}
}
总结
.navigationBarItems 是用于在导航栏中添加操作按钮的简单方式,但由于它的功能局限性(只能放在导航栏左右两侧),已经逐步被 .toolbar 替代。
如果在开发支持 iOS 14+ 的项目,建议使用 .toolbar,因为它更加灵活、现代且可扩展。
如果需要兼容 iOS 13,仍可以使用 .navigationBarItems,但未来建议逐步迁移到 .toolbar。