2015-11-05 1 views
14

У меня есть UITabViewController ->UINavigationController ->UIViewController и хотите скрыть и отобразить statusBar. когда я звоню setNeedsStatusBarAppearanceUpdate(), метод prefersStatusBarHidden не вызывается.prefersStatusBarHidden не называется

func fadeOutStatusBar (notification: NSNotification) { 
    statusBarHidden = true 
    self.setNeedsStatusBarAppearanceUpdate() 
} 

func fadeInStatusBar (notification: NSNotification) { 
    statusBarHidden = false 
    self.setNeedsStatusBarAppearanceUpdate() 
} 

override func prefersStatusBarHidden() -> Bool { 
    return statusBarHidden 
} 
+1

Это обсуждалось во многих случаях в ОС. см. [это] (http://stackoverflow.com/questions/18059703/cannot-hide-status-bar-in-ios7) – Jamil

+0

только принятый ответ противоположный моему – Md1079

+0

@ Md1079, потому что ваш вопрос не был очень ясно - это звучало так, будто вы спрашивали, как это сделать только в одном виде, поэтому большинство людей дало вам решения, чтобы просто настроить один вид, в то время как Nghia Luong ответил на оба варианта, которые могли бы помочь. – Natalia

ответ

15

Обдумал это. в info.plist файле: вид контроллера в строке состояния внешний вид должен быть установлен в YES

+4

Это не работает в iOS 9.3.1 simulator – adib

+3

Ваш ответ здесь был бы более полезен, если бы вы более подробно объяснили, что это приведет к скрытию локальной панели состояния? Глобально через приложение? (FYI ваш ответ показывает, как сделать это глобально - в то время как ваш первоначальный вопрос, похоже, спрашивает, как это сделать для «представления»). Это сбивает с толку и неясно. Я думаю, вы должны принять ответ Нгии на этот вопрос. – Natalia

+0

Да, это позволяет диспетчерам view обрабатывать строку состояния. В противном случае делегат никогда не вызывается. – Medhi

27

Во-первых, View controller-based status bar appearance в файле .plist должен быть установлен в YES .

  • Если вы хотите строку состояния должны быть скрыты в приложении весь:

Для Objective-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [application setStatusBarHidden:YES]; 

    return YES; 
} 

Для Swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { 
    application.statusBarHidden = true 

    return true 
} 
  • Если вы хотите строка состояния исчезла в Укажите View Controller, в .m файле, просто реализовать:

Для Objective-C:

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 

Для Swift:

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

Для Swift 3: 'application.setStatusBarHidden (правда, с: .none)' и 'переопределение вар prefersStatusBarHidden: Bool { \t \t возвращающие \t}' – neave

+1

Я забыл про PLIST, спасибо! –

7

Для скор 3, первый, убедитесь, что View controller-based status bar appearance установлен в YES в вашем Plist файле Info

screenshot

А потом просто добавьте в ваш контроллер представления:

override var prefersStatusBarHidden: Bool { 
    get { 
     return true 
    } 
} 

Я надеюсь, что это помогает людям в будущем.

3

Возможно, это не решение проблемы OP, но то, что может быть причиной prefersStatusBarHidden, не вызвано, если вы использовали второе окно в своем делете приложения, например, для отображения заставки, и вы не скрывали после появления всплеска - тогда это окно получает события, которые приводят к вызову этих функций.

 Смежные вопросы

  • Нет связанных вопросов^_^