使用 SwiftUI 解锁后状态栏消失

Posted

技术标签:

【中文标题】使用 SwiftUI 解锁后状态栏消失【英文标题】:Status bar disappears after unlocking with SwiftUI 【发布时间】:2020-05-14 23:29:09 【问题描述】:

我有一个 状态栏最初隐藏的应用程序:YES

NavigationView 

.statusBar(hidden: true)

当应用程序启动时,该栏不可见,但其空间未被占用(因此它看起来像是顶部的额外填充)。但是当我锁定/解锁手机时,这个填充消失了,从而使整个应用程序更靠近顶部。

有什么建议吗?

【问题讨论】:

你会显示这个自定义修饰符的代码吗? MRE 将与环境信息(手机与模拟器、版本等)一起提供帮助。 【参考方案1】:

问题

刚刚用下面的视图测试了它,在你锁定/解锁屏幕后它真的跳起来了。尝试截图,它也跳起来了(我在截图答案时偶然发现了这个)。

struct ContentView: View 
    var body: some View 
        NavigationView 
            Color.green
                .navigationBarTitle("No status bar")
        
        .statusBar(hidden: true)
    

解决方法

只需添加下面代码中标记的行。

struct ContentView: View 
    var body: some View 
        NavigationView 
            Color.green
                .navigationBarTitle("No status bar")
        
        .edgesIgnoringSafeArea(.all) // <-------
        .statusBar(hidden: true)
    

恕我直言,没有这条线它应该可以工作,但显然不能。即使我设置了这个问题(Info.plist):

UIViewControllerBasedStatusBarAppearanceYES UIStatusBarHiddenYES

或者如果我直接在ContentViewSceneDelegate)上隐藏状态栏:

let contentView = ContentView().statusBar(hidden: true)

【讨论】:

谢谢你,不幸的是,edgesIgnoringSafeArea 现在的行为被逆转了。在程序启动时,该栏不存在,解锁手机后它再次出现。 你是对的。仍在研究它,到目前为止我发现safeAreaInsets.top (GeometryProxy) 包含错误的值。状态栏是隐藏的(最初在Info.plistNavigationView 上),但top 包含20。每当我锁定/解锁,截屏,...top 包含0 - 正确的。这就是它跳的原因,但还没有可靠的修复/解决方法。

以上是关于使用 SwiftUI 解锁后状态栏消失的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 设置状态栏背景颜色以与导航栏对齐

SwiftUI:状态栏颜色

更改状态栏颜色 SwiftUI 没有 UIHosting

状态栏不会消失

SwiftUI:为特定视图设置状态栏颜色

导航栏中的 SwiftUI 元素不响应状态