iOS 状态栏修改以及视频全屏播放时的注意点

2018-11-20  本文已影响0人  _RG

方式一: 修改Info.plist,

  1. 在Info.plist里面添加 Status bar is initially hidden, 设置为YES,则启动页时看不到状态栏,设置为NO, 则启动页时能看见状态栏
  1. 在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

  1. 要隐藏状态栏时, 不管有没有导航栏, 只要View controller-based status bar appearance设置为YES, 就可以在当前控制器页面实现 - (BOOL)prefersStatusBarHidden方法就行。

当视频全屏播放时,如果播放开始按钮或者返回按钮在状态栏上时会无法响应点击事件,此时最好的方式是 在全屏播放时隐藏状态栏

通过变量属性来控制显示和隐藏, 在设置hiddenStatusBar的值后,
重新渲染状态栏[self setNeedsStatusBarAppearanceUpdate];

- (BOOL)prefersStatusBarHidden {
    return self.hiddenStatusBar;
}
上一篇下一篇

猜你喜欢

热点阅读