代码之家  ›  专栏  ›  技术社区  ›  Veita

我找到了四种不同的方法来更改Xcode中的iOS状态栏。为什么有这么多,有什么不同?

  •  10
  • Veita  · 技术社区  · 8 年前

    我一直在尝试改变我的Swift应用程序中状态栏的颜色,我在XCode中找到了四种方法。然而,我只能成功地使用方法3:

    1.模拟指标(仅用于情节提要显示)

    2.一般变更->部署信息->状态栏样式

    确保以下信息。列表设置设置为“否”:

    View controller-based status bar appearance : NO
    

    在此处的下拉框中选择“灯光”或“默认”:

    General->Deployment Info->Status Bar Style
    

    3.手动设置

    确保以下信息。plist设置设置为“NO”:

    查看基于控制器的状态栏外观:否
    

    插入以下代码(通常在didFinishLaunchingWithOptions中):

    UIApplication.sharedApplication().statusBarStyle = .LightContent
    

    4.重写“preferredStatusBarStyle()”

    确保以下信息。plist属性存在并设置为“YES”:

    View controller-based status bar appearance : YES
    

    然后将以下代码添加到UIViewController(或派生类)中,该类是在Storyboard中为ViewController设置的:

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

    我目前的理解

    模拟度量仅用于显示,在运行时不提供实际更改。我相信手动设置和更改常规选项卡中的设置可能会在幕后做同样的事情,但我不确定。我想还有一种方法可以直接为单个视图控制器设置此属性。

    问题

    出于某种原因,唯一对我有效的方法是方法3,手动设置。其他方法都没有提供任何更改。就我个人而言,我更喜欢在派生类中重写,这样我就有了共享UIViewController样式的中心位置。

    1 回复  |  直到 6 年前
        1
  •  12
  •   Community CDub    4 年前

    选项1

    这没有任何作用,因为它只是一个模拟度量。您可以在接口生成器中设置它,但模拟的度量只是 模拟的,模拟的 并且在运行时不应用。

    选项2

    此选项防止单个视图控制器设置状态栏外观(由于Info.plist设置),并且它依赖于部署设置中设置的默认颜色,但该值可以在运行时更改(请参见选项3)。

    选项3

    与选项2一样,此选项防止单个视图控制器设置状态栏外观(由于Info.plist设置),但与选项2不同,我们在运行时动态设置颜色。我们可以在启动时在应用程序委托中执行此操作…或者我们可以在其他时间更改它。也许我们有一个像谷歌地图应用程序一样的夜间模式,或者我们让用户在某处配置自己的主题颜色。

    选项4

    如果要嵌入UINavigationController,则需要将UINavigation Controller子类化,并在此处覆盖“preferredStatusBarStyle()”。

    你可能错过了一步, outlined here 在里面 viewDidLoad ,尝试指定您希望有机会设置状态栏。

    override func viewDidLoad() {
        super.viewDidLoad()
    
        setNeedsStatusBarAppearanceUpdate()
    }
    

    至于为什么对于表面上相同的事物有不同的方法,我们必须首先意识到,这些方法实际上并不相同。

    再一次,让我们将其分解。

    • 选项1不是运行时更改,所以我们对它真的不感兴趣。
    • 选项2&3几乎是一样的。
    • 选项4不同于选项2&3.

    为什么我们有你的选择2/3和你的选择4?

    因为在某些应用程序中,您可能希望应用程序中每个视图控制器的状态栏颜色相同,但根据某些设置,状态栏颜色可能不同。

    例如,考虑一下谷歌地图应用程序。晚上,应用程序变为黑色,状态栏需要显示为白色,但在白天,应用程序为白色,状态栏必须为黑色。每个视图控制器都是一样的,所以设置颜色的代码只需要在一个地方实现(不需要 每一个 视图控件继承自同一基本父级)。为此,我们可能需要您的选项2/3。

    但是考虑一个应用程序,它有不同颜色的视图控制器,其中一些控制器用白色状态栏看起来更好,而另一些用黑色状态栏看起来更好些。对于这种方法,我们需要您的选项4,让每个视图控制器分别指定状态栏的颜色。

    简而言之,选项2/3是一个全局状态栏设置,无论您在应用程序中的何处都适用,而选项4是一个本地的、每个VC的设置。