Как скрыть строку состояния в конкретном контроллере вида?
У меня есть 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
}
Пожалуйста, попробуйте это и дайте мне знать, если это работает или нет
Спасибо