我需要让一个特定的ViewController嵌入到一个UINavigationController
具有光状态栏文本颜色(但其他ViewController
s表现不同).我知道至少有3种方法,但无论如何都不适用于我的情况.
如何在iOS 7中更改状态栏文本颜色,方法主要是:
在plist中设置UIViewControllerBasedStatusBarAppearance
toYES
在viewDidLoad中做一个 [self setNeedsStatusBarAppearanceUpdate];
添加以下方法:
- (UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
在iOS 7.0.3上运行,此方法对我不起作用,因为即使在我正确实现了所有3个步骤之后,preferredStatusBarStyle
也从未调用过.
UIStatusBarStyle PreferredStatusBarStyle在iOS 7上不起作用,该方法主要是:
将你的navigationBar
's 设置barStyle
为UIBarStyleBlackTranslucent
将给出白色状态栏文本(即.UIStatusBarStyleLightContent
),UIBarStyleDefault
并将给出黑色状态栏文本(即.UIStatusBarStyleDefault
).
这种方法在iPhone上公平公正,但不适用于iPad.
在plist中设置UIViewControllerBasedStatusBarAppearance
to NO
,并使用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这显然不适用于这种情况,因为我只需要为两个ViewController
s 指定不同的状态栏颜色.
谢谢大家的帮助!
对于有这个问题的人UINavigationController
我可以建议创建一个自定义UINavigationController
并preferredStatusBarStyle
在其上实现如下:
- (UIStatusBarStyle)preferredStatusBarStyle { return [self.topViewController preferredStatusBarStyle]; }
这样,状态栏样式将是顶视图控制器的样式.现在你可以实现preferredStatusBarStyle
你喜欢的视图控制器了.
这是对Groot答案的改进,以UINavigationController的简单类别的形式,而不需要子类UINavigationController.
迅速
extension UINavigationController { override public func preferredStatusBarStyle() -> UIStatusBarStyle { return topViewController?.preferredStatusBarStyle() ?? .Default } }
Swift 3和Swift 4
extension UINavigationController { open override var preferredStatusBarStyle: UIStatusBarStyle { return topViewController?.preferredStatusBarStyle ?? .default } }
Objective-C的
@implementation UINavigationController (StatusBarStyle) - (UIStatusBarStyle)preferredStatusBarStyle { return [self.topViewController preferredStatusBarStyle]; } @end
要设置UIStatusBarStyle
单独为每个UIViewController
在UINavigationController
栈你必须先继承你UINavigationController
和覆盖childViewControllerForStatusBarStyle
方法.
在你的UINavigationController子类中添加:
-(UIViewController *)childViewControllerForStatusBarStyle { return self.visibleViewController; }
你可以UIStatusBarStyle
在每种UIViewController
使用preferredStatusBarStyle
方法中设置任何你想要的东西.例如:
-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }