iOS 状态栏修改以及视频全屏播放时的注意点
方式一: 修改Info.plist,
- 在Info.plist里面添加 Status bar is initially hidden, 设置为YES,则启动页时看不到状态栏,设置为NO, 则启动页时能看见状态栏
- 在Info.plist里面添加 Status bar style, 有以下两个值,这个是控制APP状态栏颜色的,但是会受到View controller-based status bar appearance设置的影响, 如果View controller-based status bar appearance设置为YES时, 有导航栏的情况时, 会默认以导航栏的状态栏颜色为准,也就是默认黑色。 此时即使Status bar style设置为 UIStatusBarStyleLightContent在有导航栏的页面也会无效, 必须在导航栏控制器实现- (UIStatusBarStyle)preferredStatusBarStyle 方法,
如果View controller-based status bar appearance设置为NO时, 只会以 Status bar style设置的颜色为准, 无法用- (UIStatusBarStyle)preferredStatusBarStyle更改状态栏的颜色
// 默认的黑色
UIStatusBarStyleDefault
// 白色
UIStatusBarStyleLightContent
2.1当前控制器导航栏未隐藏时,
状态栏附着在导航栏上,因此修改当前控制器的preferredStatusBarStyle
无效,需要修改导航控制器的preferredStatusBarStyle
方法,或者在导航控制器分类里面重写- (UIViewController *)childViewControllerForStatusBarStyle
方法,返回self.topViewController
当导航栏未隐藏时,将状态栏的修改权交给最上层的控制器
@implementation UINavigationController (Catl)
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
}
@end
3.View controller-based status bar appearance, 谷歌翻译是(查看基于控制器的状态栏外观), View controller-based status bar appearance 默认为YES
个人理解,View controller-based status bar appearance一旦设置为NO, 则所有对控制器的状态栏操作都会无效,此时控制器状态栏的颜色完全取决于Status bar style设置的颜色
这就是为什么当View controller-based status bar appearance一旦设置为NO, 且Status bar style设置为UIStatusBarStyleLightContent时, 控制器的状态栏为白色,
温馨提示: 不要将View controller-based status bar appearance设置为NO
- 要隐藏状态栏时, 不管有没有导航栏, 只要View controller-based status bar appearance设置为YES, 就可以在当前控制器页面实现 - (BOOL)prefersStatusBarHidden方法就行。
当视频全屏播放时,如果播放开始按钮或者返回按钮在状态栏上时会无法响应点击事件,此时最好的方式是 在全屏播放时隐藏状态栏
通过变量属性来控制显示和隐藏, 在设置hiddenStatusBar
的值后,
重新渲染状态栏[self setNeedsStatusBarAppearanceUpdate];
- (BOOL)prefersStatusBarHidden {
return self.hiddenStatusBar;
}