[英]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.