美文网首页
iOS中修改状态栏StatusBar状态

iOS中修改状态栏StatusBar状态

作者: CoderChan | 来源:发表于2017-04-13 16:13 被阅读0次

    一、在iOS7之后,系统默认将状态栏交给Controller管理,如果想要改回UIApplication来控制,则需要配置info文件的:View controller-based status bar appearance 为 NO 。
    用 UIApplication 来管理 可作用于全局, 比较方便。修改也全局修改
    用 Controller 来管理 也可以在根 UINavigationController(或者Controller) 里全局设置,
    缺点是:超出了UINavigationController 范围就变回默认的颜色,例如下面第二条。
    优点是:在来回切换Controller 改变 颜色比较方便,

    1、UIApplication 控制:

    UIApplication.shared.statusBarStyle = .lightContent

    2、Controller 控制: 需要注意的是, 要在合适的位置添加: setNeedsStatusBarAppearanceUpdate() 更新状态

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    }

    示例:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    if searchController.isActive {
    return .default
    }else {
    return .lightContent
    }
    }
    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    setNeedsStatusBarAppearanceUpdate()
    }

    二、有些例外的, 比如我用 Controller 来管理状态栏,而且设置默认颜色为白色, 但是我还有一个新的 window 上面有弹窗提示信息, 但是在弹窗的时候 状态栏就会变回默认的黑色, 怎么解决这个问题呢?
    1、方法很简单:直接在新建的window上添加一个 rootviewcontroller , 在对应的控制器里设置状态栏的颜色就可以了
    2、但是状态栏和window 默认是隐藏的, 所以在修改颜色的同时也需要 把状态栏的hidden 设为false
    示例:

    class StatusBarController: UIViewController {
    override var prefersStatusBarHidden: Bool {
    return false
    }
    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    }
    }

    相关文章

      网友评论

          本文标题:iOS中修改状态栏StatusBar状态

          本文链接:https://www.haomeiwen.com/subject/buwbattx.html