Control_Status_Bar
有时候我们会单独控制一个 VC 中状态栏的显示与隐藏,这里记录一下,如何正确的显示与隐藏状态栏
由于是单独控制,所以我们需要在 info.plist 中开启 View controller-based status bar appearance
为 YES
。然后我们在自动控制的 VC 中,重写两个方法
1 | - (BOOL)prefersStatusBarHidden { |
然后在我们需要的地方调用 [self setNeedsStatusBarAppearanceUpdate];
即可,通常这可以满足大多数的场景。但是有一天我发现,有时候调用了 [self setNeedsStatusBarAppearanceUpdate];
之后,prefersStatusBarHidden
并不会被回调。经过一番探索后发现,如果你有一个 未被隐藏的 UIWindow 的时候
,调用 setNeedsStatusBarAppearanceUpdate
并不会触发 prefersStatusBarHidden
,所以,只需要把对应的 UIWindow
隐藏就可以了。
现在项目中用的是 WKWebView,当显示或隐藏状态栏的时候,会导致 WKWebView 错位,而错位的原因就是因为,在 iOS 11 上,scrollView 新出了一个 API contentInsetAdjustmentBehavior
导致的,所以我们只需要对 WKWebView 的 scrollView 指定成如下即可。
1 | if (@available(iOS 11.0, *)) { |
而对于 iOS 11 以下的版本,我们需要在 对应的 VC 中指定 self.automaticallyAdjustsScrollViewInsets = NO;
,这样 WKWebView 就不会受到 StatusBar 的显示和隐藏的影响了。