簡體   English   中英

獲取iOS上NavigationBar的默認高度(或maxY)

[英]Get the default height (or maxY) of a NavigationBar on iOS

我想知道有沒有什么辦法讓我們獲得默認的導航欄heightmaxY最好)一個的NavigationController

知道iOS 11引入了大標題,那么我們有什么辦法獲取帶有“小標題”的導航欄和帶有“大標題”的導航欄的默認height (或maxY )?

我之所以這樣問,是因為我要使導航欄的背景透明,並向其介紹我自己的背景(即效果視圖)。 但是我遇到的問題是每次我運行以下代碼

self.navigationController?.navigationBar.frame.maxY

它返回的數字比預期的要高:/

我試圖在許多回調上運行這段代碼-> onViewWillAppearonViewDidAppearonViewDidLoad

您可以使用此獲取導航欄和狀態欄的高度

  override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let topSpace:CGFloat?
        if #available(iOS 11.0, *) {
            topSpace = self.view.safeAreaInsets.top
        } else {
            topSpace = self.topLayoutGuide.length
        }
        print(topSpace)
  }

我已經使用本機方法來獲取包括狀態欄在內的導航欄的高度。 使用此行代碼獲取導航欄的高度,並根據需要進行使用。 這對我來說在所有設備和不同的iOS版本上都很好。

let navigationBarHeight = UIApplication.shared.statusBarFrame.size.height +
            (self.navigationController?.navigationBar.frame.height ?? 0.0)

這對我有用

let navigationBarHeight = UIApplication.shared.statusBarFrame.size.height +
    (self.navigationController?.navigationBar.frame.height ?? 0.0)

即使是艱難的方法也可能是最適合您的解決方案,我通常會嘗試不使用本機導航欄,而是將其隱藏並創建自己的導航欄。 這使得在應用程序中更容易使用自定義和更高級的設計。

到目前為止,我發現的最佳方法是無需創建導航控制器實例:

[self.navigationBar sizeThatFits:CGSizeZero].height;

而且,它還支持屏幕方向更改。

暫無
暫無

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

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