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
相关产品推荐
相关产品推荐

