一、前言
二、失效原因1、对于隐藏显示StatusBar因为做之前的项目的时候,将其返回值写死了,所以在子类重新调用设置的时候返回值并没有变,都是不隐藏的。然后之前想要干掉基类的时候将其系统函数的前缀也改了,所以也不会被调用,额,大致意思就是这样。 2、对于更改StatusBar风格之前只是测试框架的时候用过,并没有使用UINavigationController作为Root,所以没有测试出来,假如是这种情况下我们自己的UIViewController的 三、更改后的代码
@interface YDViewController ()
@property (nonatomic, assign) UIStatusBarStyle statusBarStyle;
@property (nonatomic, assign) BOOL statusBarHidden;
@property (nonatomic, assign) BOOL changeStatusBarAnimated;
@end
#pragma mark - system
- (UIStatusBarStyle)preferredStatusBarStyle {
if (self.statusBarStyle) {
return self.statusBarStyle;
} else {
return UIStatusBarStyleLightContent;
}
}
- (BOOL)prefersStatusBarHidden {
return self.statusBarHidden;
}
- (void)changeStatusBarStyle:(UIStatusBarStyle)statusBarStyle
statusBarHidden:(BOOL)statusBarHidden
changeStatusBarAnimated:(BOOL)animated {
self.statusBarStyle=statusBarStyle;
self.statusBarHidden=statusBarHidden;
if (animated) {
[UIView animateWithDuration:0.25 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
}
else{
[self setNeedsStatusBarAppearanceUpdate];
}
}
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
} 四、 方法解析- (UIStatusBarStyle)preferredStatusBarStyle:
- (void)setNeedsStatusBarAppearanceUpdate 这个方法会通知系统去调用当前UIViewController的 - (UIViewController *)childViewControllerForStatusBarStyle: 此方法就是在Demo内新加的方法,不重写的话默认返回nil。 如第三部分的代码,我使用的是 解决方法就是在自定义的Nav里添加如下代码: - (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
} 上面的代码很简单,就是告诉系统不要调用我自己(就是UINavigationController)的 对此总结来说就是:只要UIViewController重写的的 五、statusBar背景的设置(额外记录一下)1、系统方法:
2、自定义方法
六、完事!(之前Demo已经更新!)著作权归作者所有 |
|
来自: sungkmile > 《StatusBar》