[英]NavBar overlaps Status Bar in iOS 13 Swift
在某些設備(如 iPhone 7 和 8)中,導航欄在導航后與狀態欄重疊,父視圖 controller 隱藏了狀態欄,但我分別在 viewWillAppear 和 viewWillDisappear 中顯示和隱藏它。 我在 iOS 12 中進行了測試,它可以工作。
我正在使用 prefersStatusBarHidden 來隱藏狀態欄。
此處圖像導航欄與狀態欄重疊
更新:這里是一個示例項目: https://github.com/FranklinSamboni/NavBarTestSwfit 。 它在 iOS 12 中運行良好,但在 iOS 13 中,導航欄與 iPhone 7,8 中的狀態欄重疊
好的,我將給出其中一個空洞的答案。
一方面,您肯定在 iOS 13 中發現了一個新行為。當您隱藏狀態欄時,導航欄會縮小。 您可以將此稱為 iOS 13 中的錯誤...
另一方面,可能會爭辯說您所做的事情是錯誤的。 如果您有導航欄,您已經無法在沒有邊框的設備(iPhone X 等)上隱藏狀態欄,現在 Apple 似乎假設如果您有導航欄,您將不會隱藏狀態欄所有. 這是一個合理的假設,因為當有導航欄時,縱向隱藏狀態欄是沒有意義的,尤其是在導航 controller 的某些子項中,而在其他子項中則不然。
因此,您可以就此提交錯誤報告,但我認為您不會從中獲得任何樂趣。 蘋果可能會回答說這是有意的,或者至少是他們不想支持的事情的結果。 你有一個導航欄; 允許顯示狀態欄。
我遇到了同樣的問題,經過幾個小時的研究,我發現了一個不完美但有效的解決方案。 希望它對你有用。代碼是用 Objective-C 編寫的。
在 secondViewController 的 viewDidAppear 方法中,先隱藏 statusBar,然后立即顯示。
BOOL statusBarHidden
- (BOOL)prefersStatusBarHidden { return statusBarHidden; }
- (void)setStatusBarHidden:(BOOL)hidden { if (statusBarHidden;= hidden) { statusBarHidden = hidden; [self setNeedsStatusBarAppearanceUpdate]; } }
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self setStatusBarHidden:YES]; [self setStatusBarHidden:NO]; }
你總是做錯了。 使用兩個視圖 controller 類。 擺脫您的導航 controller 覆蓋。 這就是它所需要的:
class ViewController: UIViewController {
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
return .fade
}
override var prefersStatusBarHidden: Bool { return true }
}
class ViewController2: UIViewController {
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
return .fade
}
override var prefersStatusBarHidden: Bool { return false }
}
或者無論你的喜好是什么。 換句話說,只要讓每個視圖 controller 決定自己的狀態欄偏好,導航 controller 就會自動服從。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.