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

时间:2020-10-18 02:15:54

标签: swiftui uinavigationcontroller

我在SwiftUi中遇到了一个很大的问题。真正简单的NavigationView层次结构中的“后退按钮”在第三个视图上消失。如果我进一步查看,则“后退”按钮又在那里,我可以返回。

我进行了3小时的搜索,但只找到了SwiftUI: Back button disappears when clicked on NavigationLink

显然这不能解决我的问题。

感谢您的帮助!

6 个答案:

答案 0 :(得分:4)

对于不想使用已弃用方法的人,我找到了另一种解决方法。

只需添加您的.toolbar这个ToolBarItem

.toolbar {

    // ... other toolbar items

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

答案 1 :(得分:3)

另一个似乎适用于 Xcode 12.4 的解决方案:

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

答案 2 :(得分:1)

我发现了问题!

NavigationView上的.toolbar修饰符以Buggy方式隐藏“后退”按钮!

答案 3 :(得分:1)

对我来说,问题有点不同-后退按钮仅在与第三个视图互动后才在第三个视图上消失。点击进入列表视图。

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

答案 4 :(得分:1)

如果你想让你的代码更干净

/// 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()        
}

答案 5 :(得分:-1)

您需要添加到您的 NavigationView

.navigationViewStyle(StackNavigationViewStyle())