2016-07-23 4 views
2

В моем приложении у меня есть 4 ViewController и в двух из них я меняю строку состояния от белого до черного, как это:быстрых ИОСЫ пытаются изменить цвет строки состояния на определенном ВК

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default 
    } 

    override func viewWillDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 

     UIApplication.sharedApplication().statusBarStyle = .LightContent 
    } 

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

Как сохранить статусную строку на определенном экране ViewController?

ответ

0

Попробуйте добавить следующий способ в свои VC. Используйте .default или .lightContent, чтобы изменить цвет строки состояния. Я проверил с помощью Xcode 8 и 3: быстрого

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.default; 
} 

Я создал новые вкладки приложения с Xcode 7.3.1 и быстрым 2.3. У меня есть две вкладки с классами, связанными с FirstViewController и SecondViewController. В FirstViewController я добавил следующий метод:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.Default; 
} 

И В SecondViewController, я изменил фон в черный и я добавил следующий метод:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.LightContent; 
} 

Наконец, я добавил две кнопки в FirstViewController. Одна кнопка представляет контроллер по модулю, а другая кнопка присутствует через push. Когда я представил точку зрения модально работу «preferredStatusBarStyle», но когда я представил через толчок мне нужно добавить следующую строку кода:

self.navigationController?.navigationBar.barStyle = .Black 
+0

Для этого также требуется добавление клавиши 'View на основе контроллера на основе состояния ', установленной в/YES в информации о проекте. plist' и может потребоваться выполнить пользовательскую реализацию '- (UIViewController *) childViewControllerForStatusBarStyle;' в подклассе контроллера корневого приложения приложения в зависимости от архитектуры вашей иерархии представлений. – markedwardmurray

+0

Это не помогло, что сказал @markedwardmurray. Но can not я просто использую '' 'override func viewWillAppear (анимированный: Bool) { super.viewWillAppear (анимированный) UIApplication.sharedApplication(). StatusBarStyle = UIStatusBarStyle.Default }' '' в каждом VC? – user2722667

+0

Вы бы подумали, но есть много особенностей с изменением глобального состояния строки состояния между контроллерами представлений. Более надежное отображение состояния панели управления на основе контроллера. В iOS 10 геттеры для переопределения на UIViewController фактически будут превращены в полные свойства. Метод глобального внешнего вида - это дни, когда ожидается, что приложение будет иметь одну цветовую схему: светлую или темную. Он не работает, чтобы переключать его с частотой после запуска приложения – markedwardmurray

0

Если вы действительно не хотите, чтобы переопределить методы делегата для preferredStatusBarStyle, вам могут по-прежнему использовать:

UIApplication.sharedApplication().statusBarStyle = .LightContent 

путем удаления:

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    UIApplication.sharedApplication().statusBarStyle = .LightContent 
} 

и пусть только пусть строка состояния будет установлено Что происходит в viewWillAppear. Очевидно, что это больше подвержено ошибкам, но если ваша навигация относительно линейна, то это будет самое простое решение.

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