进入第三个视图(控制器)后,SwiftUi导航栏按钮消失



我对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())

最新更新