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.mfile 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() } }
