You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中为何仅显示一个navigationBarItems?

解决SwiftUI中NavigationBarItems仅显示一个的问题

哦,我太懂这个坑了!你连续调用两次.navigationBarItems的话,第二次的设置会直接覆盖掉第一次的,所以最后只会显示你最后写的那个(也就是trailing的Text2)。

正确的做法是把leading和trailing的内容放在同一个.navigationBarItems调用里,或者如果需要在同一侧放多个元素,就用HStack把它们包起来。

方案1:使用单个navigationBarItems调用(兼容iOS13及以上)

修改后的代码应该是这样的:

struct ContentView: View {
    var body: some View {
        NavigationView{
            VStack{
                Text("Something")
            }
            .navigationBarTitle("Title", displayMode: .inline)
            .navigationBarItems(
                leading: Text("Text1"),
                trailing: Text("Text2")
            )
        }
    }
}

如果需要在同一侧添加多个按钮/文本,比如leading侧放两个Text,就用HStack:

.navigationBarItems(
    leading: HStack(spacing: 20) {
        Text("Text1")
        Text("Text3")
    },
    trailing: Text("Text2")
)

方案2:使用iOS14+推荐的Toolbar(更现代的写法)

从iOS14开始,Apple推荐使用.toolbar替代navigationBarItems,写法更灵活:

struct ContentView: View {
    var body: some View {
        NavigationView{
            VStack{
                Text("Something")
            }
            .navigationBarTitle("Title", displayMode: .inline)
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    Text("Text1")
                }
                ToolbarItem(placement: .navigationBarTrailing) {
                    Text("Text2")
                }
            }
        }
    }
}

这种方式不仅支持添加多个元素,还能自定义更多的toolbar位置,比如底部工具栏等。

内容的提问来源于stack exchange,提问作者Max Wells

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:52:57