SwiftUI - 导航栏返回按钮只出现了一小段时间

6

我已经调研了许多解决方案,但都没有起作用。我的应用程序导航流程如下:

  1. ViewController(UIKit)- 推出 SwiftUI 视图
  2. 这个 SwiftUI 视图会在几秒钟内显示后退按钮,然后隐藏。

以下是我的代码:

struct FirstSwiftUIView: View {

var body: some View {

  VStack {
    Text("First SwiftUi View")
    NavigationLink {
      SecondSwiftUIView()
    } label: {
      Text("Next View")
    }
  }
  .navigationBarBackButtonHidden(true)
  .navigationBarTitle("")
}

}

3个回答

11

我找到了解决方法。在从UIKit切换到SwiftUI之前,可以从UIHostingController中隐藏返回按钮。

let firstSwiftUI = UIHostingController(rootView: FirstSwiftUIView())
firstSwiftUI.navigationItem.hidesBackButton = true
navigationController?.pushViewController(firstSwiftUI, animated: true)

1
你可以使用这个技巧:
final class CommonHostingController<Content: View>: UIHostingController<Content> {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(true, animated: false)
        navigationController?.setNavigationBarHidden(false, animated: animated)
    }
}

你的 SwiftUI 视图的导航栏会立即显示,但是在推送动画期间,你的 UIKit viewController 的导航栏会隐藏。

看起来更好。


0
  • 将视图包装在 NavigationView 中。(也许您已经在应用程序结构中这样做了)

  • 在目标视图中使用 .navigationBarBackButtonHidden(true) - 因为您希望隐藏返回按钮。

    struct ContentView: View {

     var body: some View {
    
          NavigationView {
              VStack {
                  Text("First SwiftUi View")
                  NavigationLink {
    
                      // your destination view
                      Text("Destination")
                          .navigationBarBackButtonHidden(true)
    
                  } label: {
                      Text("Next View")
                  }
              }
              .navigationBarTitle("")
          }
      }
    

    }


我从哪个视图来到FirstSwiftUIView是在UIKit中(一个ViewController),它已经有了UINavigationController。因此,在SwiftUI中再次添加NavigationView将在顶部创建两个导航栏。 - Bhuvan Bhatt
然后只需删除我的额外 NavigationView - 重要的是,.navigationBarBackButtonHidden(true) 在内部视图上。 - ChrisR
实际上,如果第一和第二个视图都是SwiftUI,则这可以正常工作。但是,当我从UIKit导航到SwiftUI时就不行了。 - Bhuvan Bhatt

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