设置app的状态栏样式
http://www.jianshu.com/p/9f7f3fa624e7
http://cocoa.venj.me/blog/view-controller-based-status-bar-style-and-uinavigationcontroller/
http://www.jianshu.com/p/4196d7cf95f4
-
状态栏的字体为黑色: UIStatusBarStyleDefault
-
状态栏的字体为白色: UIStatusBarStyleLightContent
设置app的状态栏样式的使用使用了旧的方式,在info.plist里面设置了View controller-based status bar appearance为NO,默认为YES,一般式iOS6的时候使用这种方式,iOS7,8也兼容,但是到了iOS9就报了警告。
一. 在 info.plist 中,将 View controller-based status bar appearance 设为 NO
状态栏字体的颜色只由下面的属性设定,默认为白色:
// default is UIStatusBarStyleDefault
[UIApplication sharedApplication].statusBarStyle
解决个别 vc 中状态栏字体颜色不同的办法
1、在info.plist中,将View controller-based status bar appearance设为NO.
2、在app delegate中:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
3、在个别状态栏字体颜色不一样的vc中
-(void)viewWillAppear:(BOOL)animated{
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
以前我们通过上面代码改变状态了颜色,iOS9以后点进去看api发现如下说明
// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]");
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]");
解决办法:
修改方式将View controller-based status bar appearance设置为YES,然后使用新的方式来实现状态栏的样式。
- (UIStatusBarStyle)preferredStatusBarStyle;
- (UIViewController *)childViewControllerForStatusBarStyle;
- (void)setNeedsStatusBarAppearanceUpdate
View controller-based status bar appearance的默认值就是YES。
如果View controller-based status bar appearance为YES。
则[UIApplication sharedApplication].statusBarStyle 无效。
用下面的方法:
1、在vc中重写vc的preferredStatusBarStyle方法。
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];
但是,当vc在nav中时,上面方法没用 ,vc中的preferredStatusBarStyle方法根本不用被调用。
原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,
只会调用navigation controller中的preferredStatusBarStyle方法,
vc中的preferredStatusBarStyley方法跟本不会被调用。
解决办法有两个:
方法一:
设置navbar的barStyle 属性会影响status bar 的字体和背景色。如下。
//status bar的字体为白色
//导航栏的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//status bar的字体为黑色
//导航栏的背景色是白色,状态栏的背景色也是白色。
//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
方法二:
自定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:
Nav* nav = [[Nav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
@implementation Nav
- (UIStatusBarStyle)preferredStatusBarStyle
{
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
UINavigationController和View Controller-based状态栏风格
从iOS 7开始, UIViewController
有了一个新的方法:- preferredStatusBarStyle
,可以让用户指定状态栏风格。但问题是这个方法只有在ViewController
不包含在UINavigationController
中时才起作用。大部分情况下,ViewController
不会单独使用,一般都会嵌套在UINavigationController
中的。因为不知道这一点,所以在很长一段时间内,我都很困惑,明明我已经在我的ViewController
里写了- preferredStatusBarStyle
, 却一点都不起作用。
知道了原因,接下来就简单了。我们可以写一个UINavigationController
的扩展,覆盖其默认实现,返回最上面的ViewController
的preferredStatusBarStyle
。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|
用Swift来写:
1
2
3
4
5
|
|
然后,在需要使用UINavigationController
的时候,引入UINavigationController+StatusBar.h
头文件就可以了。如果你用Swift,增加了extension
就完成了。
补充:
要使用View Controller Based Status Bar Style,你可能需要在项目的的Info.plist里增加一条记录:“View controller-based status bar appearance”,并将其值设置成YES
。
参考来源:Being Objective…
示例代码(Swift):NavStatusStyle
(全文完)
posted on 2016-06-23 14:06 CodingForever 阅读(2952) 评论(1) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?