IOS状态栏样式(颜色、隐藏)小记

语言:swift

现在设置状态栏颜色的都是用preferredStatusBarStyle
设置状态栏隐藏的都是用prefersStatusBarHidden
目的是为了把控制状态栏样式的权利放给单个控制器上。

然而现在大多App的底层控制器一般是tabBarController->navigationController->viewController,所以它们在控制状态栏样式的时候也会有各自的处理

比如tab层控制器:

override var childForStatusBarStyle: UIViewController? {
    return self.selectedViewController
}
override var childForStatusBarHidden: UIViewController? {
    return self.selectedViewController
}

比如navigation层控制器:

override var childForStatusBarStyle: UIViewController? {
    return self.topViewController
}
override var childForStatusBarHidden: UIViewController? {
    return self.topViewController
}

view层控制器就是熟悉的:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}
override var prefersStatusBarHidden: Bool {
    return false
}

问题是:在配合模态控制器(presentViewController)特别是modalPresentationStyle不是fullScreen的时候,它的控制就不灵光了,会出现很多意料之外的情况。

尝试过各种方法,正确的是modalPresentationCapturesStatusBarAppearance
在弹出模态视图时加一句:

nav.modalPresentationCapturesStatusBarAppearance = true

意思大概是把控制状态栏样式的权利交给模态控制器。
然后tab层继续交给selectedViewController,navigation层继续交给topViewController就好。

暂时没发现什么问题,先记下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容