簡體   English   中英

NavBar 與 iOS 13 Swift 中的狀態欄重疊

[英]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 中的狀態欄重疊

使用 iPhone 8(模擬器)的圖像首頁第二個視圖第二個視圖

好的,我將給出其中一個空洞的答案。

  • 一方面,您肯定在 iOS 13 中發現了一個新行為。當您隱藏狀態欄時,導航欄會縮小。 您可以將此稱為 iOS 13 中的錯誤...

  • 另一方面,可能會爭辯說您所做的事情是錯誤的。 如果您有導航欄,您已經無法在沒有邊框的設備(iPhone X 等)上隱藏狀態欄,現在 Apple 似乎假設如果您有導航欄,您將不會隱藏狀態欄所有. 這是一個合理的假設,因為當有導航欄時,縱向隱藏狀態欄是沒有意義的,尤其是在導航 controller 的某些子項中,而在其他子項中則不然。

因此,您可以就此提交錯誤報告,但我認為您不會從中獲得任何樂趣。 蘋果可能會回答說這是有意的,或者至少是他們不想支持的事情的結果。 你有一個導航欄; 允許顯示狀態欄。

我遇到了同樣的問題,經過幾個小時的研究,我發現了一個不完美但有效的解決方案。 希望它對你有用。代碼是用 Objective-C 編寫的。

在 secondViewController 的 viewDidAppear 方法中,先隱藏 statusBar,然后立即顯示。

  1. 在 secondViewController 中聲明一個成員變量BOOL statusBarHidden
  2. 從 UIViewController 實施 prefersStatusBarHidden 方法
     - (BOOL)prefersStatusBarHidden { return statusBarHidden; }
  3. 創建一個新方法 setStatusBarHidden
     - (void)setStatusBarHidden:(BOOL)hidden { if (statusBarHidden;= hidden) { statusBarHidden = hidden; [self setNeedsStatusBarAppearanceUpdate]; } }
  4. 在 viewDidAppear 中調用 setStatusBarHidden
     - (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.

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