如何在iOS 13中的Swift中立即更改状态栏文本颜色

Svetoslav Atanasov

我正在使用Swift 5.1和Xcode 11.1,目前已经完成了黑暗模式设计。

用户使用此代码在设置页面中更改主题样式后,主题会立即更新。

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
   return
}
appDelegate.changeTheme(themeVal)

// App Delegate File
...
func changeTheme(themeVal: String) {
   if #available(iOS 13.0, *) {
       switch AppState.appThemeStyle {
       case "dark":
           window?.overrideUserInterfaceStyle = .dark
           break
       case "light":
           window?.overrideUserInterfaceStyle = .light
           break
       default:
           window?.overrideUserInterfaceStyle = .unspecified
       }
   }
}

但是问题是我看不到状态栏文本,因为状态栏文本的颜色和视图颜色是相同的。

有人可以建议我一个好的解决方案吗?谢谢。

莫伊塔巴·侯赛尼(Mojtaba Hosseini)

状态栏颜色不是全局的(默认情况下),如果将其设置为not ViewControllerBased,则不能再进行更改。因此,您需要像这样在任何视图中更改设置它:

var statusBarStyle = UIStatusBarStyle.default { didSet { setNeedsStatusBarAppearanceUpdate() } }
override var preferredStatusBarStyle: UIStatusBarStyle { statusBarStyle }

这两个变量可帮助您更改状态栏。请注意,您可以setNeedsStatusBarAppearanceUpdate在动画块内调用以使其可动画化。

为了检测何时UserInterfaceStyle更改(并相应地更新statusBar颜色),所有视图和viewController都具有委托功能。因此知道:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)

    if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
        updateStatusBarColor()
    }
}

这是功能

func updateStatusBarColor() {
    switch traitCollection.userInterfaceStyle {
    case .unspecified: statusBarStyle = .default
    case .light: statusBarStyle = .darkContent
    case .dark: statusBarStyle = .lightContent
    }
}

注意:

ParentViewController定义statusBarColor因此,如果您使用generalnavigationControllertabBarController则使用这些代码为其自定义类就足够了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在iOS中更改状态栏文本颜色

如何在iOS上更改状态栏文本颜色

在iOS中反应本机更改状态栏文本颜色

如何更改 Android 中状态栏的颜色文本?

如何在iOS 13中的Swift中立即更改主题样式(用户界面样式)

如何在Xamarin Forms中更改文本颜色状态栏?

如何在iOS 13中获取状态栏的高度?

如何在Android中更改状态栏的颜色?

如何在Flutter中更改状态栏颜色?

如何在Android中更改状态栏的颜色?

如何在Android中更改状态栏颜色?

如何在Ionic 2中更改状态栏颜色

使用Shell时如何在iOS中更改状态栏的颜色

如何根据主题 android 更改状态栏文本颜色

iPhone:如何更改状态栏的文本颜色(而不是背景)?

如何在Swift iOS应用中隐藏状态栏?

在启动屏幕iOS 7中更改状态栏文本颜色

如何根据设置的主题更改flutter中的状态栏图标和文本颜色?

停止在iOS 13中更改状态栏

在iOS8中使用Swift更改特定ViewController的状态栏颜色

Flutter:在iOS中更改状态栏颜色

Flutter:不使用AppBar时如何在Android和iOS上更改状态栏文本颜色

如何使用swift在一个视图控制器中更改状态栏颜色?

如何删除Android中更改的自动状态栏颜色

如何更改单个内容页面的状态栏背景、文本颜色 Xamarin(Ios、Android)

在iOS 7中隐藏导航栏时,如何更改状态栏的颜色?

如何在Xamarin形式的android和ios中更改状态栏颜色(主要为深色和主要)?

如何在Android 4.4上将状态栏文本颜色更改为暗

Flutter-如何在黑暗模式下更改状态栏文本的颜色?