语言: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就好。
暂时没发现什么问题,先记下