在 table 视图中开始滚动后,如何将 UIStatusBarStyle 从 .lightContent 更改为 .default?

How to change UIStatusBarStyle from .lightContent to .default after scrolling starts in a table view?

我想在滚动开始时将 table 视图控制器的 preferredStatusBarStyle 从 .lightContent 更改为 .default? 这是初始状态:

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

谢谢!

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

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

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

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

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

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

这样,只要您更改变量的值,它就会自动刷新。

摸索了一段时间,找到了解决方案....

如果您想在视图出现后随时更改状态栏样式,您可以使用此方法:

在文件 info.list 中添加行:View controller-based status bar appearance 并将其设置为 YES

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
     }
 }