iOS 13: threading violation: expected the main thr

2020-02-12 09:22发布

问题:

The app is being crashed when trying to hide the navigation bar for a viewcontroller only for iOS 13 users.

  • I got the crash on Crashlytics of Fabric which titled as below,

Fatal Exception: NSInternalInconsistencyException

threading violation: expected the main thread

  • The app is being crashed on this line of viewWillAppear method,
    self.navigationController?.isNavigationBarHidden = true
  • To hide the navigation bar on the viewWillAppear method of UIViewController, I am using below code,
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = true
        super.viewWillAppear(animated)
    }
  • To show the navigation bar on the viewWillDisappear method of UIViewController, I am using below code,
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = false
        super.viewWillDisappear(animated)
    }

回答1:

do following action

  DispatchQueue.main.async {
    self.navigationController?.isNavigationBarHidden = false
  }