设置状态栏颜色 - 延迟?

Posted

技术标签:

【中文标题】设置状态栏颜色 - 延迟?【英文标题】:Set Status bar color - delay? 【发布时间】:2016-03-30 10:25:05 【问题描述】:

当我尝试在 ios 中更改我 StatusBar 的文本颜色时,总是会有 1-2 秒的延迟。所以它从黑色开始,然后延迟它变成白色,正如我想要的那样。

所有这些更改都在我的 ViewController 中,在 ViewDidLoad 中。

我将使用自定义视图来获取特定颜色:

    let statusBarHeight = CGFloat(20)
    let colorBGView = UIView(frame: CGRectMake(0, -statusBarHeight, self.view.bounds.width, statusBarHeight))
    colorBGView.backgroundColor = UIColor.customDarkerGrey()
    self.navigationController?.navigationBar.addSubview(colorBGView)

并将 barStyle 设置为 Black(使用 UINavigationController 时获得白色字体)

    self.navigationController?.navigationBar.barStyle = UIBarStyle.Black

设置值:

 View controller-based status bar appearance

在 plist.info 中为“YES”

但仍然存在“滞后” - 所以一切都是白色的,但最多需要 2 秒。有什么想法吗?

我找不到答案问题,因为这只是关于着色,而不是关于延迟的问题:

preferredStatusBarStyle isn't called

编辑:

好的,在创建一个包含 2 个 ViewController 和一个 NavigationController 的新项目后,当您尝试将颜色从 ViewController 更改为 ViewController 时,发现“延迟”是正常的。看来,函数:

override func preferredStatusBarStyle() -> UIStatusBarStyle 
    return UIStatusBarStyle.LightContent

被调用时有一点延迟 - 当添加错误时没有任何反应:

self.setNeedsStatusBarAppearanceUpdate()

所以在我的情况下,我在 NavigationController 上全局更改了它,并且(因为它加载了我的应用程序)您无法识别“延迟”。

也许这对其他人有帮助。

【问题讨论】:

你能创建一个最小的例子吗? 拨打setNeedsStatusBarAppearanceUpdate in viewWillAppear: 目前我没有看到任何差异(在 ViewDidLoad 中出现了问题) 这种情况只发生在模拟器中吗?也许您在模拟器中打开了慢速动画 (cmd-T)? 不,没有慢速动画处于活动状态。但目前只在模拟器中尝试过。当应用程序加载时,我已经更改了我的代码以更改颜色 - 所以你无法识别延迟。但是如果你想模拟行为,只需在 Xcode 中创建一个简短的项目并尝试在第二个 ViewController 上更改颜色,你会看到 View 已经加载时会有短暂的延迟。 【参考方案1】:

尝试在方法didFinishLaunchinOptions中为AppDelegate中的状态栏设置颜色。由于您的状态栏颜色默认设置为其他颜色,然后您在控制器中将其设置为新颜色,因此它的创建延迟。

还有

设置值:

View controller-based status bar appearance

在 plist.info 中为“NO”

【讨论】:

@derdida 对你有帮助吗? 如何在我的 AppDelegate 中将颜色设置为白色?那里没有 NavigationController?而且preferredStatusBarStyle() 方法只在ViewController 上可用。 状态栏颜色很好,问题是我的字体颜色。有延迟。 @derdida 这就是我向您解释的内容.. 如果您在某些默认值已加载时尝试更改某些 viewController 中状态栏的外观,那么它会产生延迟.. 您无法在 AppDelegate 中设置颜色 - 新 (iOS9) 方法仅适用于 ViewControllers。所以你必须在你的 RootViewController/NavigationController 上设置它,而不是在 AppDelegate 中。

以上是关于设置状态栏颜色 - 延迟?的主要内容,如果未能解决你的问题,请参考以下文章

Android如何设置顶部状态栏颜色(主题)

uniapp设置状态栏颜色

android 怎么设置状态栏字体颜色

java 状态栏工具类,显示隐藏状态栏,设置状态栏颜色,沉浸式,透明状态栏

Swift-修改状态栏颜色

iOS之 状态栏字体颜色的设置