IOS 7 и более поздние версии: установить стиль строки состояния для каждого контроллера представления
Я попробовал много способов установить стиль строки состояния (по умолчанию или lightcontent), но не может заставить его работать на основе каждого контроллера. Я могу установить стиль строки статуса только для всего приложения.
Есть ли у кого намек?
Я пробовал UIViewControllerBasedStatusBarAppearance
и
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
но эти методы не работают.
Ответы
Ответ 1
Вы пробовали это?
-
Установите "Просмотреть строку состояния на основе контроллера" (UIViewControllerBasedStatusBarAppearance
) до YES
в вашем Info.plist. (YES
- значение по умолчанию, поэтому вы также можете просто оставить это значение вне вашего plist.)
-
В вашем методе viewDidLoad вызовите [self setNeedsStatusBarAppearanceUpdate]
.
-
Внедрите preferredStatusBarStyle
, возвращая стиль строки состояния, который вы хотите для этого контроллера представления.
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Ответ 2
Здесь есть уловка, если ваш контроллер просмотра находится в автономном UINavigationController, а не на основе UINavigationController на основе раскадровки, тогда выше всех методов не удается. Я столкнулся с этой ситуацией, а затем, чтобы установить строку состояния в светлый стиль, который я использовал после
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
Это отлично сработало для меня.
Ответ 3
EDIT: это решение устарело на iOS 9. Пожалуйста, выберите один из других ответов.
С UIViewControllerBasedStatusBarAppearance
установите значение NO, я смог установить стиль в белый текст, используя:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
Это потому, что цвет текста в этом стиле был белым на iOS 6 и ниже.
ОБНОВЛЕНИЕ:. Согласно @jowie, вы можете попробовать это на iOS8:
[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
Ответ 4
В режиме viewDidLoad поместите это:
Цель C
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[self setNeedsStatusBarAppearanceUpdate];
Свифта
UIApplication.shared.statusBarStyle = .lightContent
self.setNeedsStatusBarAppearanceUpdate()
Ответ 5
В Swift я смог сделать это, написав:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
var moreViewController : UINavigationController = tbc.moreNavigationController
moreViewController.navigationBar.barStyle = UIBarStyle.Black
В основном вас интересует последняя строка.
Это привело к изменению табуляции на белый:
![enter image description here]()
Обратите внимание, что я ничего не менял в Info.plist
, чтобы достичь этого результата.
Для получения дополнительной информации об изменении Navigation Status Bar
, пожалуйста, ознакомьтесь с этой ссылкой:
http://www.appcoda.com/customize-navigation-status-bar-ios-7/
Ответ 6
Я уверен, у вас есть контроллер вида, встроенный в контроллер навигации. Чтобы избежать установки стиля панели навигации в .Black
, используйте этот подкласс:
class YourNavigationController: UINavigationController {
override func childViewControllerForStatusBarStyle() -> UIViewController? {
return topViewController
}
}
Ответ 7
Swift:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
var moreViewController : UINavigationController = tbc.moreNavigationController
moreViewController.navigationBar.barStyle = UIBarStyle.Black
Цель C:
присоединить это к методу controller.m
file viewDidLoad:
[self setNeedsStatusBarAppearanceUpdate].
затем реализует этот метод в том же файле controller.m
:
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Официальные документы:
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html
Рекомендуемая статья:
http://www.ryadel.com/2015/03/04/xcode-set-status-bar-style-and-color-in-objective-c/
Ответ 8
В ViewController, который вы хотите изменить цвет строки состояния
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
- (void) viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
Ответ 9
Быстрое расширение для этого, потому что я всегда забываю, как это работает
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()
}
}