您的位置:首页 > 其它

关于xcode6升xcode7之后多window时,程序的状态栏管理问题

2015-10-20 13:40 423 查看


关于xcode6升xcode7之后多window时,程序的状态栏管理问题

在iOS6到iOS8时,我们设置app的状态栏样式,一般把info.plist里面设置了View controller- based status bar appearance为NO,默认为YES,来应用程序来管理。这样的话多window时,并不会有影响状态栏的样式,因为状态栏是由应用UIApplication来管理。

到了iOS9之后,上面的配置就会就会报警告。对于一名看不得警告的程序员来说,这是很难受的。那么想要消除这些警告,就必须将View controller-based status bar appearance设置为YES(或删除这条配置,因为默认就为YES)。这样的话在单个window时不会出现问题,但是如果你的应用有多个window,且其它的window的显示级别比主window的级别高时就会出现问题。因为状态栏的管理默认是交给最上面那个window的根控制器来管理的。
当我从一个控制器modal或者push出另一个控制器来,需要修改状态栏时又麻烦了,因为这个时候状态栏颜色和隐藏都是由顶部topWindow的rootViewController决定的

那么该怎样来处理这个问题呢?

解决方案一:用通知(传参数修改状态栏)

解决方案二:用单例(设计比较简单,清晰)推荐使用这种方法

因为这个topWindow(最顶部的window)只有一份,设计成单例,并且提供两个属性
@property (nonatomic, assign) UIStatusBarStyle statusBarStyle;
@property (nonatomic, assign) BOOL statusBarHidden;

#pragma mark - 状态栏控制
- (BOOL)prefersStatusBarHidden
{
return self.statusBarHidden;
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
return self.statusBarStyle;
}

#pragma mark - setter
- (void)setStatusBarHidden:(BOOL)statusBarHidden
{
_statusBarHidden = statusBarHidden;
[self setNeedsStatusBarAppearanceUpdate];
}

- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle
{
_statusBarStyle = statusBarStyle;
[self setNeedsStatusBarAppearanceUpdate];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: