iOS 7 и выше: установите статус-баре за просмотр контроллер
Я пробовал много способов установить стиль строки состояния (по умолчанию или lightcontent), но не могу заставить его работать на основе контроллера вида. Я могу установить стиль строки состояния только для всего приложения.
У кого-нибудь есть подсказка?
Я пытался UIViewControllerBasedStatusBarAppearance
И
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
, но эти методы не работают.
9 ответов:
Вы пробовали это?
Установите в поле" вид панели состояния на основе контроллера " (
UIViewControllerBasedStatusBarAppearance
) значениеYES
.файл plist. (YES
является значением по умолчанию, поэтому вы также можете просто исключить это значение из списка plist.)В методе viewDidLoad вызовите
[self setNeedsStatusBarAppearanceUpdate]
.Реализовать
preferredStatusBarStyle
, возвращая стиль строки состояния, который требуется для данного контроллера вида.- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
Здесь есть загвоздка, если ваш контроллер вида находится внутри автономного UINavigationController, а не часть раскадровки на основе UINavigationController, то прежде всего методы терпят неудачу. Я столкнулся с этой ситуацией, а затем, чтобы установить строку состояния в светлый стиль, я использовал следующий
Это прекрасно сработало для меня.[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
Правка: это решение устарело на iOS 9. Пожалуйста, выберите один из других ответов.
С
UIViewControllerBasedStatusBarAppearance
, установленным в NO, я смог установить стиль белого текста с помощью:[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
Это потому, что цвет текста в этом стиле был белым на iOS 6 и ниже.
Обновление: Согласно @jowie вы можете попробовать это на iOS8:
[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
В методе viewDidLoad поставьте следующее:
Цель С
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [self setNeedsStatusBarAppearanceUpdate];
Swift
UIApplication.shared.statusBarStyle = .lightContent self.setNeedsStatusBarAppearanceUpdate()
В Swift я смог сделать это, написав:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black
В основном вас интересует последняя строка.
Обратите внимание, что я ничего не менял в
Это привело к изменению таббара на белый:Info.plist
для достижения этого результата.
Для получения дополнительной информации об измененииNavigation Status Bar
, пожалуйста, ознакомьтесь с этой ссылкой: http://www.appcoda.com/customize-navigation-status-bar-ios-7/
Держу пари, что ваш контроллер вида встроен в навигационный контроллер. Чтобы избежать установки стиля панели навигации в
.Black
Используйте этот подкласс:class YourNavigationController: UINavigationController { override func childViewControllerForStatusBarStyle() -> UIViewController? { return topViewController } }
Свифт:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController var moreViewController : UINavigationController = tbc.moreNavigationController moreViewController.navigationBar.barStyle = UIBarStyle.Black
Цель С:
Добавьте это к методу
controller.m
file viewDidLoad:[self setNeedsStatusBarAppearanceUpdate].
Затем реализуем этот метод в том же файле
controller.m
:- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
Официальные документы:
Рекомендуемые Статья:
Http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/
В ViewController, который вы хотите изменить цвет строки состояния
- (void) viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; } - (void) viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; }
Быстрое расширение для этого, потому что я всегда забываю, как это работает
extension UIViewController { // utility to set the status bar appearance // Note: Make sure "View controller-based status bar appearance" is set to NO in your target settings or this won't work func setStatusBarForDarkBackground(dark: Bool) { UIApplication.sharedApplication().statusBarStyle = dark ? .LightContent : .Default setNeedsStatusBarAppearanceUpdate() } }