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)
答案
您需要使用变量来实现此目标并将其与目标绑定
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在视图中迅速显示然后消失的主要内容,如果未能解决你的问题,请参考以下文章