Swift导航栏navigationBarItems
Swift导航栏navigationBarItems

Swift导航栏navigationBarItems

在 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。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注