SwiftUI navigationBarHidden 不起作用并引发错误

Posted

技术标签:

【中文标题】SwiftUI navigationBarHidden 不起作用并引发错误【英文标题】:SwiftUI navigationBarHidden doesn't work and throws error 【发布时间】:2020-05-10 12:09:02 【问题描述】:

我正在使用导航链接推送下一个视图

        NavigationLink(destination: DetailsView()
            .navigationBarTitle("")
            .navigationBarHidden(true),
                       isActive: $isDetailsActive) 
            EmptyView()
        

我也尝试了相同的内部细节视图。我得到的只是详细信息视图上的空导航栏和终端错误:

"在制作动画时更改项目可能会导致导航损坏 酒吧”

【问题讨论】:

你能显示完整的代码是从哪里激活的吗? 有人找到解决方案了吗?我对不可预测的导航栏有同样的问题...... 【参考方案1】:

该错误表明您不应该在导航控制器上推送或弹出新视图,直到它完成最后一次推送或弹出。

【讨论】:

【参考方案2】:

我用.onAppear.onDisappear隐藏了我的导航栏,你可以把这些修饰符放在你的父视图或者DetailsView()中,看:

NavigationView 
    VStack 
        Text("Hello World")
    
    .navigationBarTitle("")
    .navigationBarHidden(self.isNavBarHidden)
    .onAppear 
        self.isNavBarHidden = true
    .onDisappear 
        self.isNavBarHidden = false
    

【讨论】:

不幸的是,当辅助视图被推送到导航堆栈并且主视图不再可见时,主视图中不会调用 onDisappear()。只有在主视图完全消失时才会调用它。所以我不确定这如何解决这个问题…… 它对我来说非常有效,你在做一些不同的事情吗? @安东 对不起,@zgluis — 我不确定你说的到底是什么,因为恐怕我不明白你是如何提议将你提供的代码与 OP 集成的代码。我只是在评论您的声明,即.onAppear.onDisappear 可以放在父视图中。事实上,当子视图被推入导航堆栈时,这些修饰符都不会在父视图中调用,当子视图被弹出并且父视图再次可见时也不会调用。您可以通过在其中放置 print() 函数来验证这一点——它们从不打印。 没问题,我只是想帮助@Anton。我用一个完整的工作示例创建了一个要点:gist.github.com/zgluis/5d7fc8f747a526dfb2aa9133f2785f59,我还注意到 isNavBarHidden 必须初始化为 false 感谢您的澄清。当我在 Xcode 11.5 中运行您的代码时,.onAppear.onDisappear 闭包永远不会触发。我想知道你打算用它们做什么。它还显示了当前的 ios 错误,在该错误中,在父视图中隐藏导航栏会在过渡结束时以不平稳的动作错误地将其隐藏在子视图中。【参考方案3】:

试试:

 NavigationView 

    some code ..

   .navigationBarTitle("")
   
   .navigationBarHidden(true)


似乎navigationBarTitle 似乎设置为(""),以便.navigationBarHidden(true)NavigationView 中工作(Xcode 版本 13)

【讨论】:

以上是关于SwiftUI navigationBarHidden 不起作用并引发错误的主要内容,如果未能解决你的问题,请参考以下文章

swiftui 请求 渲染数据

SwiftUI 学习曲线

SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?

SwiftUI - 如何在 SwiftUI 中弹出到特定视图?

SwiftUI3.0将UIKit ViewController转化成 swiftUI的view

SwiftUI 五