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

10

我在使用SwiftUi时遇到了一个大问题。在非常简单的NavigationView层次结构中,“Backbutton”在第三个视图上消失了。如果我再向前进入一个视图,则Backbutton又会出现,我就可以返回。

我搜索了3个小时,但只找到了这篇SwiftUI: Back button disappears when clicked on NavigationLink

显然,这无法解决我的问题。

感谢任何帮助!


这个回答解决了你的问题吗?工具栏在NavigationView中删除了我的返回按钮 - pawello2222
7个回答

10

对我来说,问题有点不同 - 在与第三个视图交互后,即点击列表视图后,返回按钮仅在第三个视图上消失。

我的解决方法是使用旧的.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
      }
   }
}

3
我也遇到了同样的错误。虽然使用navigationBarItems可以解决问题,但是这种方法已经被弃用了。该错误还会影响任何尝试使用底部工具栏的操作。 - Brandon C.

9

我发现了另一个适用于不想使用废弃方法的解决方法。

只需在您的.toolbar中添加此ToolBarItem

.toolbar {

    // ... other toolbar items

    ToolbarItem(placement: .navigationBarLeading) {
        Text("")
    }
}

6

在Xcode 12.4上似乎能够正常工作的另一种解决方案:

ToolbarItem(placement: .navigationBarLeading) {
    HStack {}
}

只需将此代码添加到我的 ToolbarItem(placement: .navigationBarTrailing) 上方,它就能在任何地方完美运行。同时,在 Xcode 13+ 中仍然有效。 - Dru Freeman

5
如果您想让您的代码更加整洁
/// 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()        
}


4

我发现了问题!

NavigationView上的.toolbar修饰符以有缺陷的方式隐藏了返回按钮!


3
我觉得这并没有真正解释很多。你是否发现了更多关于“错误方式”的信息,或者为什么会表现出那样的行为? - Aaron Krauss
我认为不仅如此,当这个 bug 发生时,甚至滑动返回手势也无法使用。 - ThiagoAM

1
我已经找到了这个问题的解决方案。如果您没有使用.toolbar或.navigationBarItems,您只需将.navigationBarItems(trailing: EmptyView())添加到您的子视图中即可。这将始终保持您的返回按钮处于活动状态。
   var body: some View {
      ScrollView() {
        ...
      }
       .navigationBarItems(trailing: EmptyView())
     }

'''


0

你需要添加到你的NavigationView中

.navigationViewStyle(StackNavigationViewStyle())

你能详细说明一下吗?这似乎并没有解决问题。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接