Подтвердить что ты не робот

Строка состояния IOS7 скрывается/отображается на выбранных контроллерах

Я хотел бы показать и скрыть строку состояния на некоторых контроллерах. Можно ли это сделать или это скорее общая настройка приложения.

Я видел много сообщений/вопросов о обновлении plist:

View controller-based status bar appearance - NO

Если это будет выполнено, то какое управление будет дано?

Я хочу показать строку состояния на главном экране приложения. Но, например, в боковом (слайд-меню), я бы хотел, чтобы он не показывал, возможно ли это? Может ли это быть изменено в IB или коде?

РЕДАКТИРОВАТЬ - Я использую https://github.com/edgecase/ECSlidingViewController реализацию.

Главный контроллер (показывающий первую страницу) должен показывать строку состояния, но контроллер левого меню при слайдах не должен.

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

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

4b9b3361

Ответ 1

Настройка plist "View controller-based status bar appearance" управляется только в том случае, если на iOS 7 должна применяться настройка на основе контроллера.

Если вы установите для этого параметра plist значение НЕТ, вам необходимо вручную включить и отключить строку состояния, как (как это было до iOS 6):

[[UIApplication sharedApplication] setStatusBarHidden:YES]

Если вы установите для этой опции plist значение YES, вы можете добавить этот метод к каждому из ваших контроллеров view, чтобы каждый раз устанавливать статусBar для каждого контроллера (что особенно хорошо, если у вас есть интеллектуальная система подкласса viewControllers)

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Edit:

есть два других метода, которые представляют интерес, если вы выбираете новый статус на панели управления на основе viewController -

Принудительное обновление состояния с помощью:

[self setNeedsStatusBarAppearanceUpdate]

Если у вас есть вложенные контроллеры (например, contentViewController в подклассе TabBarController, ваш подкласс TabBarController может спросить его текущий childViewController и перенаправить этот параметр. Я думаю, что в вашем конкретном случае это может быть полезно:

- (UIViewController *)childViewControllerForStatusBarHidden {
     return _myChildViewController;
}
- (UIViewController *)childViewControllerForStatusBarStyle {
     return _myOtherViewController;
}

Ответ 2

На iOS 7 и более поздних версиях просто реализуйте -prefersStatusBarHidden, например, в UIViewController, который должен скрывать строку состояния:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

По умолчанию используется NO.

Ответ 3

Swift 3:

override var prefersStatusBarHidden: Bool {
    return true
}

Ответ 4

Вы также можете показать/скрыть строку состояния в блоке анимации, поместив код анимации внутри свойства hasSet переменной, который описывает, следует ли показывать или скрывать. Когда вы устанавливаете новое значение для statusBarHidden Bool, это автоматически запускает анимированное обновление строки состояния в течение выбранной вами продолжительности.

/// Swift 3 syntax: 

var statusBarHidden: Bool = true {
    didSet {
        UIView.animate(withDuration: 0.5) { () -> Void in
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
}

override var prefersStatusBarHidden: Bool {
    return statusBarHidden
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)        
    statusBarHidden = false // show statusBar, animated, by triggering didSet block
}

Ответ 5

Быстрая версия Mojo66 answer:

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