prefersStatusBarHidden失效不起作用

2021-06-07  本文已影响0人  ONE2

1.在 info.plist中添加

View controller-based status bar appearance : YES

2.新建一个继承于UINavigationController的子类,并实现如下方法

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

3.在需要隐藏statusBar的ViewController中实现方法

    override var prefersStatusBarHidden: Bool {
        return true
    }

关于为什么要重写childForStatusBarHidden和childForStatusBarStyle两个属性:

这两个属性默认返回值为nil。

当调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用Container(容器控制器)的preferredStatusBarStyle这个方法(window?.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做Container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。

重写了childForStatusBarHidden和childForStatusBarStyle后,这两个属性返回的都是当前展示的controller,则调用的statusBarStyle就是当前controller重写的preferredStatusBarStyle了。

参考链接:
https://zhengry.github.io/2018/10/10/Swift-4.2%E5%A1%AB%E5%9D%91%E4%B9%8BStatusBarStyle%E8%AE%BE%E7%BD%AE/

上一篇下一篇

猜你喜欢

热点阅读