SwiftUI-NavigationLink中的NavigationBar在视图中迅速显示然后消失

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SwiftUI-NavigationLink中的NavigationBar在视图中迅速显示然后消失相关的知识,希望对你有一定的参考价值。

我有一个ContentView,其中包含一个NavigationView,该NavigationView导致一个DestinationView。我想在ContentView中隐藏导航栏,但在DestinationView中显示它。为了将其隐藏在ContentView中,我将navigationBarHidden设置为true,并给navigationBarTitle一个空字符串。在DestinationView中,我将navigationBarHidden设置为false,并为其指定标题“ DestinationView”。

如果我运行该项目并点击NavigationLink,DestinationView将显示NavigationBar,但在视图出现后会迅速将其隐藏。有人可以帮我吗?

struct ContentView: View 
    var body: some View 
        NavigationView 
            ZStack 
                Color.red.frame(maxWidth: .infinity, maxHeight: .infinity)
                NavigationLink(destination: DestinationView()) 
                    ZStack 
                        Color.green.frame(width: 200, height: 200)
                        Text("Tap me")
                    
                
            
            .navigationBarTitle("")
            .navigationBarHidden(true)
        
    


struct DestinationView: View 
    var body: some View 
        List 
            Text("1")
            Text("2")
        
        .navigationBarTitle("DestinationView")
        .navigationBarHidden(false)
    

enter image description here

答案

您需要使用变量来实现此目标并将其与目标绑定

struct ContentView: View 
         @State var isNavigationBarHidden: Bool = true
        var body: some View 
            NavigationView 

                ZStack 
                    Color.red.frame(maxWidth: .infinity, maxHeight: .infinity)
                    NavigationLink(destination: DestinationView(isNavigationBarHidden: self.$isNavigationBarHidden)) 
                        ZStack 
                            Color.green.frame(width: 200, height: 200)
                            Text("Tap me")
                        
                    

                
                .navigationBarHidden(self.isNavigationBarHidden)
                .navigationBarTitle("")
                .onAppear 
                    self.isNavigationBarHidden = true
                
            
        
    

    struct DestinationView: View 
        @Binding var isNavigationBarHidden: Bool
        var body: some View 
            List 
                Text("1")
                Text("2")
            
            .navigationBarTitle("DestinationView")

            .onAppear 
                self.isNavigationBarHidden = false
            
        
    
另一答案

我遇到了这个错误,最终使用UIViewControllerRepresentable包装了一个控制器,该控制器将导航栏的隐藏状态设置为其viewDidAppear方法:

struct ContentView: View 
    var body: some View 
        NavigationView 
            ZStack 
                Color.red.frame(maxWidth: .infinity, maxHeight: .infinity)
                NavigationLink(destination: DestinationView()) 
                    ZStack 
                        Color.green.frame(width: 200, height: 200)
                        Text("Tap me")
                    
                
            
            .navigationBarTitle("")
            .navigationBarHidden(true)
        
    


struct DestinationView: View 
    var body: some View 
        List 
            Text("1")
            Text("2")
        
        .navigationBarTitle("DestinationView")
        .navigationBarHidden(false)
        .background(HorribleHack())
    


struct HorribleHack: UIViewControllerRepresentable 
    func makeUIViewController(context: Context) -> HorribleHackViewController 
        HorribleHackViewController()
    

    func updateUIViewController(_ uiViewController: HorribleHackViewController, context: Context) 
    


class HorribleHackViewController: UIViewController 
    override func viewDidAppear(_ animated: Bool) 
        DispatchQueue.main.async 
            self.navigationController?.setNavigationBarHidden(false, animated: false)
        
    

以上是关于SwiftUI-NavigationLink中的NavigationBar在视图中迅速显示然后消失的主要内容,如果未能解决你的问题,请参考以下文章

varchar(N)和char(N)中的N解析

C中的N叉树

加法减法乘法及幂运算中的取余公式

解读源码中的问题

如何从 bigquery 中的句子中删除 \n����

python - 这个def中的n + = 2是啥? [复制]