首页新闻招聘找找看知识库
  • 最近在设置某些页面状态栏颜色的时候出现了属性不响应的问题

      override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }

    依稀记得是直接重写preferredStatusBarStyle: UIStatusBarStyle这个属性,然后将info.plist中的View controller-based status bar appearance设置为NO

    但是这样设置之后发现还是不响应。

    环境相关:swift 5.0 , Xcode 10.2

    然后我就开始各种搜索和尝试,发现如果是自定义的UINavigationController,现在需要重写另外一个属性

    /// 重写此方法让 preferredStatusBarStyle 响应
        override var childForStatusBarStyle: UIViewController? {
            return self.topViewController
        }
    为什么要重写这个东西呢?
    因为这两个方法默认返回值是nil
    也就是当我们调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用Container(容器控制器)的preferredStatusBarStyle这个方法(window?.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做Container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。
    这个时候childForStatusBarHidden和childForStatusBarStyle两个方法就派上用场了。

    并且将info.plist中的View controller-based status bar appearance设置为YES

     

     
     
     
登录后才能评论,请先登录注册