我对SwiftUi有一个巨大的问题。";"后退按钮";在一个非常简单的NavigationView中,层次结构在第三个视图中消失。如果我再看一个视图,"后退"按钮就会再次出现,我就可以回去了。
我搜索了3个小时,但只找到了这个SwiftUI:当点击NavigationLink 时,后退按钮消失了
显然这并不能解决我的问题。
感谢您的帮助!
对我来说,问题有点不同——只有在与第三个视图交互后,返回按钮才在第三个查看中消失,例如,单击列表视图。
我的解决方法是使用旧的.navigationBarItems而不是.toolbar,所以:
.navigationBarItems(trailing:
Menu {
Button(action: {
//some action
}) {
//some label
}
Button(action: {
//some action
}) {
//some label
}
}
label: {
//some label
}
)
而不是:
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Menu {
Button(action: {
//some action
}) {
//some label
}
Button(action: {
//some action
}) {
//some label
}
}
label: {
//some label
}
}
}
我为不想使用不推荐使用的方法的人找到了另一种解决方法。
只需在您的.toolbar
中添加此ToolBarItem
:
.toolbar {
// ... other toolbar items
ToolbarItem(placement: .navigationBarLeading) {
Text("")
}
}
另一个似乎正在Xcode 12.4
:上工作的解决方案
ToolbarItem(placement: .navigationBarLeading) {
HStack {}
}
如果你想让你的代码更干净
/// A ToolbarItem wrapper to work around the back button disappearance bug in SwiftUI 2.
struct NavbarBackButtonDisappearanceWorkaroundItem: ToolbarContent {
var body: some ToolbarContent {
ToolbarItem(placement: .navigationBarLeading) {
Color.clear
}
}
}
使用如下:
.toolbar {
NavbarBackButtonDisappearanceWorkaroundItem()
SomeOtherUsefulItem()
}
我发现了问题!
NavigationView上的.toolbar修改器以Buggy的方式隐藏了后退按钮!
我已经找到了这个问题的解决方案。如果您既不使用.toolbar也不使用.navigationBarItems,则只需向您的孩子添加.navigattionBarItems(尾随:EmptyView(((即可。这将始终保持您的后退按钮的活力(
var body: some View {
ScrollView() {
...
}
.navigationBarItems(trailing: EmptyView())
}
''
您需要添加到NavigationView
.navigationViewStyle(StackNavigationViewStyle())