导入presentationMode环境变量时自定义NavigationView搞砸了
Posted
技术标签:
【中文标题】导入presentationMode环境变量时自定义NavigationView搞砸了【英文标题】:Custom NavigationView gets messed up when importing the presentationMode Environment variable 【发布时间】:2021-03-06 13:45:07 【问题描述】:我正在使用自定义导航栏视图和设置,我将其隐藏在主视图中并显示在子视图中。一切正常,直到我在孩子中添加了这一行:
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
我需要在孩子中使用它,以便我们可以弹回主视图。现在,当我打开孩子然后单击返回(甚至不使用 env 变量)然后再次打开子视图时,导航栏不会像以前一样忽略安全区域。这是问题的 GIF:
在子视图中看到新的灰色空间了吗?
这是代码:
import SwiftUI
@main
struct NavBarApp: App
var body: some Scene
WindowGroup
NavigationView
MainView()
struct MainView: View
init()
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
appearance.backgroundColor = .clear
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().prefersLargeTitles = false
var body: some View
VStack
Spacer()
NavigationLink("Go to child view", destination: ChildView())
Spacer()
.edgesIgnoringSafeArea(.all)
.navigationBarHidden(true)
.tabItem
Text("Home")
struct ChildView: View
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View
VStack
Rectangle()
.frame(maxWidth: .infinity, maxHeight: 66)
.foregroundColor(Color.black)
.edgesIgnoringSafeArea(.all)
Spacer()
Text("Chlid View")
.font(.largeTitle)
.padding()
Spacer()
.edgesIgnoringSafeArea(.all)
.navigationBarTitle("View A", displayMode: .inline)
.navigationBarItems(trailing: AnyView(Button(action:
)
Text("Add")
))
我注意到了什么:
-
删除presentationMode 解决了这个问题。
未在子视图的导航栏上添加按钮可解决此问题。
不在 MainView 中自定义 NavigationBar 的外观也解决了这个问题。
关于发生了什么以及如何解决此问题的任何想法?
【问题讨论】:
【参考方案1】:好的,我在外观设置中将其缩小到这一行:
UINavigationBar.appearance().isTranslucent = false
删除它解决了这个问题。删除它并没有影响自定义导航栏的外观,所以我现在将使用此解决方案。
【讨论】:
以上是关于导入presentationMode环境变量时自定义NavigationView搞砸了的主要内容,如果未能解决你的问题,请参考以下文章
presentationMode.wrappedValue.dismiss() 无法正常工作
SwiftUI中sheet弹出嵌在NavigationView中的子视图无法用presentationMode关闭(dismiss)弹出视图的解决
SwiftUI中sheet弹出嵌在NavigationView中的子视图无法用presentationMode关闭(dismiss)弹出视图的解决