如何在表视图中滚动后将UIStatusBarStyle从.lightContent更改为.default?

时间:2017-11-30 15:45:20

标签: ios swift uinavigationbar ios11 uistatusbar

我正在尝试在滚动开始时将表视图控制器的preferredStatusBarStyle从.lightContent更改为.default? 这是初始状态: enter image description here

这是最终状态: enter image description here 我对iOS开发比较陌生。请提供有关如何实现这一目标的详细信息?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要找到一种方法来在视图控制器中的某处存储类型为UIStatusBarStyle的变量。

然后在视图控制器中添加:

var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyleVariable // This is the variable you created
}

如果您想切换样式,只需更改statusBarStyleVariable的值并执行setNeedsStatusBarAppearanceUpdate()

编辑: 这可以是您的变量代码:

var statusBarStyleVariable: UIStatusBarStyle {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

这样,每当您更改变量的值时,它都会自动刷新。

答案 1 :(得分:-1)

我在侦察一段时间后找到了解决方案......

如果要在视图出现后随时更改状态栏样式,可以使用:

在文件info.list中添加行:查看基于控制器的状态栏外观并将其设置为

var viewIsDark = Bool()

func makeViewDark() {

viewIsDark = true
setNeedsStatusBarAppearanceUpdate()
}

func makeViewLight() {

viewIsDark = false
setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {

if viewIsDark {
    return .lightContent 
} else {
    return .default 
} 
}

如果您的视图控制器未嵌入导航控制器,则上述代码可以正常工作。如果它嵌入在导航控制器中,请将其添加到视图控制器的底部:

 extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
 // code goes here
     }
 }