簡體   English   中英

iOS 13 狀態欄故障

[英]iOS 13 Status Bar Glitch

嘗試將狀態欄顏色從一個視圖控制器更改為另一個視圖控制器時,iOS 13 上似乎存在故障。 之前的視圖控制器將首選狀態欄樣式覆蓋為淺色內容。 導航到子視圖時,我調用以下代碼根據界面樣式設置狀態欄。

    override var preferredStatusBarStyle: UIStatusBarStyle {
        if #available(iOS 13, *) {
            if self.traitCollection.userInterfaceStyle == .dark {
                return .darkContent
            } else {
                return .lightContent
            }

        }
        return .default
    }

狀態欄看起來像這樣,一半是亮的,時間是暗的(應該是這樣)。 在任意時間后,狀態欄將正確繪制。 我試過調用 setNeedsStatusBarDisplay()。 哪個確實被調用,但在重新渲染后沒有解決問題。 這僅在 iOS 13 上發生。已在多個設備上進行測試

狀態欄故障。 時間很短,而電池和網絡圖標很暗:圖片

提前致謝!

這是我為解決此問題所做的工作:

@interface AHTabBarController : UITabBarController

- (UIViewController *)childViewControllerForStatusBarStyle {

    UINavigationController *navigationController = self.selectedViewController;
    navigationController.navigationBar.barStyle = UIBarStyleDefault; // status bar style

    return navigationController;
}

每次更改UIWindow.rootViewController時,我都會遇到相同的狀態欄故障。 即使在空項目中也可以重現,它是在 Xcode 11 中從頭開始創建的,並且已經由它正確配置。 但是在 iOS 12 及更低版本上一切正常。

我找到了適用於我的 iOS 13 解決方案。 如果你從 Xcode 10 / iOS 12 更新你的項目,你應該先將 SceneDelegate 添加到項目中(我已經根據本手冊完成了它)。 然后,在更改根視圖控制器后,您應該立即調用makeKeyAndVisible

if (@available(iOS 13, *)) {
    id<UIWindowSceneDelegate> sceneDelegate = (id<UIWindowSceneDelegate>) UIApplication.sharedApplication.connectedScenes.allObjects.firstObject.delegate;
    [sceneDelegate.window makeKeyAndVisible];
}

對不起,Objective-C 代碼,但 Swift 版本非常相似。

這不是故障將其設置回默認值

override var preferredStatusBarStyle: UIStatusBarStyle {
        return self.style
    }
    var style: UIStatusBarStyle = .default

通過將 info.plist 中基於視圖控制器的狀態欄外觀設置為 NO 來修復它。

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM