Как скрыть строку состояния в конкретном контроллере вида?

У меня есть 3 контроллера представления, которые добавлены к pageViewController, чтобы я мог прокручивать между ними 3. Проблема в том, что я хочу отображать строку состояния только в 1 из viewController. Пока что я могу скрыться от них всех или показать их всех.

Я попробовал следующее:

    private var isStatusBarHidden = false {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
}

Как я добавил VC как дочерние контроллеры представления к моему представлению прокрутки:

 let storyboard = UIStoryboard(name: "Main", bundle: nil)

    page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController
    page1.view.translatesAutoresizingMaskIntoConstraints = false
    page1.delegate = self
    scrollView.addSubview(page1.view)
    addChildViewController(page1)
    page1.didMove(toParentViewController: self)

1 ответ

У вас есть 3 VC означает, что все 3 ViewController будет иметь код ViewDidAppear и viewWillDisappear

 override open func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        //It will show the status bar again after dismiss
        UIApplication.shared.isStatusBarHidden = true
    }


override open func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    //It will hide the status bar again after dismiss
    UIApplication.shared.isStatusBarHidden = false
}
override open var prefersStatusBarHidden: Bool {
    return true
}

Скопируйте и вставьте код в тот ViewController, в котором вы хотите скрыть строку состояния. Так что он будет делать внутри вашего viewDidAppear, он будет скрывать вашу строку состояния, и как только мы покинем класс, он установит строку состояния видимой.

Если ваш pageViewController является родительским представлением, мы можем сделать это с помощью индекса страницы. Предположим, вы хотите показать строку состояния на странице 2 и скрыть на страницах 1 и 3. Таким образом, мы можем сделать это на этой странице.

PageDataSource Function {
   if(index == 1 || index == 3){
     UIApplication.shared.isStatusBarHidden = true
   }
   else{
     UIApplication.shared.isStatusBarHidden = false
  }
}

override open var prefersStatusBarHidden: Bool {
    return true
}

  override open func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    //It will hide the status bar again after dismiss
    UIApplication.shared.isStatusBarHidden = false
}

Пожалуйста, попробуйте это и дайте мне знать, если это работает или нет

Спасибо

Другие вопросы по тегам