2015-11-05 2 views
5

попытайтесь скрыть строку состояния из модального представления.строка состояния, скрытая в модальном виде (над полноэкранным представлением)

уже проверить несколько методов:

override func prefersStatusBarHidden() -> Bool { 
    return true 
} 

with/without self.setNeedsStatusBarAppearanceUpdate() 

также

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade) 

но амортизируются в прошивке 9

это работает в полноэкранном режиме презентации (модальный вариант Segue презентации), но обратите внимание на более полный объем это моя настройка.

если у вас есть какие-либо идеи ..

+0

Пожалуйста, проверьте http://stackoverflow.com/questions/32808593/setstatusbarhidden-withanimation-deprecated-in-ios- 9, что, я думаю, касается вашей проблемы. – geraldWilliam

+0

привет, спасибо но такой же выпуск. работает на полноэкранном представлении, но не на полном экране. – raphael

+0

Сначала перейдите в plist и проверьте, установлено ли на панели состояния View на контроллере YES значение YES и задано prefersStatusBarHidden(), которое вы пробовали. – Flipper

ответ

1

Действительно для FullScreen обновление строки состояния называется автоматически, но не для OverFullScreen.

Кроме того, в моем случае я был необходимость иметь дело с навигационным контроллером в стеке, чтобы передать ModalViewController, как ребенок:

extension UINavigationController { 

    public override func childViewControllerForStatusBarHidden() -> UIViewController? { 
     return self.visibleViewController 
    } 

    public override func childViewControllerForStatusBarStyle() -> UIViewController? { 
     return self.visibleViewController 
    } 
} 

Внутри ModalViewController мы вручную обновить строку состояния, и для того, чтобы сделать это гладкий мы должны сделать это в viewWillDisappear, но в этот момент visibleViewController еще ModalViewController, ничего не осталось, чтобы использовать внутренний статус boolBarHidden и обновить его соответственно

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    self.statusBarHidden = true 
    self.setNeedsStatusBarAppearanceUpdate() 
} 
override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.statusBarHidden = false 
    self.setNeedsStatusBarAppearanceUpdate() 
} 
override func prefersStatusBarHidden() -> Bool { 
    return self.statusBarHidden 
} 
30

Для не полноэкранных презентации View Controller, вы должны использовать modalPresentationCapturesStatusBarAppearance свойство.

например.

toViewController.modalTransitionStyle = .coverVertical 
toViewController.modalPresentationStyle = .overFullScreen 
toViewController.modalPresentationCapturesStatusBarAppearance = true 

fromViewController.present(toViewController, 
      animated: true, 
      completion: nil) 

Для полноэкранной презентации View Controller, вам необходимо:

  1. установить новый ВК modalPresentationStyle.
  2. переопределение prefersStatusBarHidden в новый VC
  3. установить приложение PLIST UIViewControllerBasedStatusBarAppearance значение YES

например

toViewController.modalTransitionStyle = .coverVertical 
toViewController.modalPresentationStyle = .fullScreen 

fromViewController.present(toViewController, 
      animated: true, 
      completion: nil) 

(Да, состояние настройка бара прошивка ничтожно плохо. Это не удивительно, переполнение стека имеет очень много вопросов на эту тему, и так много различных ответов.)

+0

Необходим ли '.coverVertical'? –

0

Если вы используете раскадровку и вы хотите, чтобы скрыть/показать строку состояния, вы можете использовать этот метод на предыдущем контроллере представления:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.none) 
} 
Смежные вопросы