簡體   English   中英

iOS:僅隱藏一個視圖控制器的導航欄,它是 UINavigationController 的根目錄?

[英]iOS: Hide the navigation bar for only one viewcontroller which is root of the UINavigationController?

我只想隱藏一個視圖控制器的導航欄,它是 UINavigationController 的根視圖控制器。

目前我正在使用下面的代碼來隱藏特定視圖控制器的導航欄。

  • 要隱藏導航欄,
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = true
        super.viewWillAppear(animated)
    }
  • 要顯示其他視圖控制器的導航欄,
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = false
        super.viewWillDisappear(animated)
    }

當我嘗試使用此代碼時,由於線程違規,該應用程序在 iOS 13 設備中崩潰:預期主線程。

請檢查我使用上述代碼隱藏導航欄時遇到的問題,

iOS 13:線程違規:預期主線程

請讓我知道是否有任何其他方法可以僅為一個視圖控制器隱藏導航欄。

import UIKit
 class ViewController: UIViewController {

 override func viewWillAppear(_ animated: Bool){
    super.viewWillAppear(animated)
    self.navigationController?.isNavigationBarHidden = true
   }
 override func viewWillDisappear(_ animated: Bool){
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
   }

}

您可以在調用 viewWillApper 時使其透明(完全不可見),並在調用 view willDisappear 時恢復正常。 這里是輔助函數。


func makeNaBarTransparent() {
      navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
      navigationController?.navigationBar.shadowImage = UIImage()
      navigationController?.navigationBar.isTranslucent = true
  }


 func restoreNavigationBarToDefault() {
      navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
      navigationController?.navigationBar.shadowImage = nil
  }

用法

 import UIKit
class ViewController: UIViewController {

 override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        makeNaBarTransparent()
    }

 override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        restoreNavigationBarToDefault()
    }

}

我從我的一個朋友那里得到了另一種隱藏/顯示導航欄的方法。

  • 為 NavigationController 設置一個委托:
navigationController.delegate = self
  • 在一個地方隱藏/顯示每個 ViewController 的導航欄
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let hide = (viewController is YourVC)
    navigationController.setNavigationBarHidden(hide, animated: animated)
}

暫無
暫無

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

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