iOS 7及更高版本:设置每个视图控制器的状态栏风格
我尝试了许多方法来设置状态栏样式(默认或lightcontent),但不能让它在每个视图控制器的基础上工作。 我只能设置整个应用程序的状态栏样式。
有没有人有提示?
我试过UIViewControllerBasedStatusBarAppearance
和
-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
但是这些方法不起作用。
你尝试过吗?
-
在Info.plist中将“基于视图控制器的状态栏外观”(
UIViewControllerBasedStatusBarAppearance
)设置为YES
。 (YES
是默认的,所以你也可以把这个值从plist中删除。) -
在你的viewDidLoad方法中,调用
[self setNeedsStatusBarAppearanceUpdate]
。 -
实现
preferredStatusBarStyle
,返回所需的视图控制器的状态栏样式。- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
如果你的视图控制器是独立的UINavigationController而不是基于Storyboard的UINavigationController的一部分,那么在这里有一个问题,那么所有的方法都会失败。 我遇到了这种情况,然后为了将状态栏设置为我以下使用的灯光风格
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
这对我来说是完美的。
编辑:此解决scheme已被弃用在iOS 9上。请select其他答案之一。
随着UIViewControllerBasedStatusBarAppearance
设置为NO,我可以通过使用以下设置样式为白色文本:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
这是因为这种风格的文本颜色在iOS 6及更低版本上是白色的。
更新:根据@jowie你可以尝试在iOS8上:
[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
在viewDidLoad方法上,把这个:
目标C
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [self setNeedsStatusBarAppearanceUpdate];
迅速
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
基本上你对最后一行感兴趣。
这导致tabbar变成白色:
请注意,我没有更改Info.plist
中的任何内容以实现此结果。
有关更改Navigation Status Bar
更多信息,请查看以下链接: http : //www.appcoda.com/customize-navigation-status-bar-ios-7/
我敢打赌,你的视图控制器embedded到导航控制器中。 避免将导航栏的样式设置为.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
目标C:
将此附加到controller.m
文件的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]; }
Swift的扩展,因为我总是忘记这是如何工作的
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() } }