我需要让嵌入UINavigationController
中的特定ViewController具有亮状态栏文本颜色(但其他ViewController
s的行为不同)。我知道至少有3种方法,但在我的案例中没有一种有效。
>
如何在iOS7中更改状态栏文本颜色,方法主要是:
>
UIViewControlllerBasedStatusBar外观
为
YES
[自设置NeedsStatusBar外观更新];
添加以下方法:
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
在iOS 7.0.3上运行时,这种方法对我不起作用,因为即使在我正确执行了所有3个步骤之后,preferredStatusBarStyle
也不会被调用。
UIStatusBarStyle PreferredStatusBarStyle在iOS 7上不起作用,方法主要是:
将您的导航Bar
的barStyle
设置为UIBarStyleBlackTransLucent
将给出白色状态栏文本(即UIStatusBarStyleLightContent
),并且UIBarStyleDefault
将给出黑色状态栏文本(即UIStatusBarStyleDefault
)。
这种方法在iPhone上非常有效,但在iPad上却不行。
将plist中的UIViewControlllerBasedStatusBar外观
设置为NO
,并使用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这显然不适用于这种情况,因为我只需要为两个ViewController
s指定不同的状态栏颜色。
谢谢你的帮助!
要在UINavigationController
堆栈上为每个UIViewController
单独设置UIStatusBarStyle
,您必须首先子类化您的UINavigationController
并覆盖ChilViewControlllerForStatusBarStyle
方法。
在UINavigationController子类中添加:
-(UIViewController *)childViewControllerForStatusBarStyle {
return self.visibleViewController;
}
然后,您可以使用preferredStatusBarStyle
方法在每个UIViewController
中将UIStatusBarStyle
设置为您想要的任何内容。如:
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
这里是对Groot答案的一个改进,它是UINavigationController的一个简单类别,而不需要将UINavigationController子类化。
敏捷的
extension UINavigationController {
override public func preferredStatusBarStyle() -> UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle() ?? .Default
}
}
斯威夫特3
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
目标-C
@implementation UINavigationController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return [self.topViewController preferredStatusBarStyle];
}
@end
对于对UINavigationController
有此问题的人,我建议创建一个自定义UINavigationController
,并在其上实现preferredStatusBarStyle
:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return [self.topViewController preferredStatusBarStyle];
}
这样,状态栏样式将是顶视图控制器的样式。现在,您可以实现视图控制器的首选状态栏样式。
所以在iOS 13之前,我正在设置NavigationController。导航栏。BarStyle可控制状态栏中文本的颜色。但是现在有了新的航空航天飞机,有没有办法控制它呢?我已经尝试覆盖preferedStatusBarStyle,并确保我的plist也包含该设置,但据我所知,如果您的视图控制器位于UINavigationController中,这是不荣幸的。 现在,对于iOS 13,我将使用
我当前的应用程序运行在iOS 5和iOS 6上。 导航栏的颜色为橙色,状态栏的背景颜色为黑色,文本颜色为白色。但是,当我在iOS 7上运行相同的应用程序时,我观察到状态栏看起来是透明的,与导航栏的背景颜色相同,并且状态栏文本颜色为黑色。 因此,我无法区分状态栏和导航栏。 如何使状态栏与iOS 5和iOS 6中的状态栏相同,即黑色背景色和白色文本色?如何以编程方式执行此操作?
如附图所示,状态栏文本为黑色。有没有办法换另一种颜色,比如白色?
我当前的应用程序运行在iOS 4.2、5和6上。 导航栏为橙色,状态栏为黑色背景色。然而,当我在iOS 7上运行相同的应用程序时,我观察到状态栏看起来是透明的,与导航栏的背景颜色相同。 因此,我无法区分状态栏和导航栏。如何使状态栏与iOS 5和iOS 6中的状态栏相同,即黑色背景色和白色文本色?我如何通过编程实现这一点? 我在谷歌上搜索了一下,发现一个建议,我必须添加一个黑色背景,大约20像素高的
状态栏文字颜色 sdk状态栏文字的颜色可以设置为白色或者黑色 , 设置方法如下: /** @param isDark true为黑字模式, false为白色模式 */ Ntalker.getInstance().statusBarDarkMode(boolean isDark);