【问题标题】:Change Status Bar style in XCode 8.2 / Swift 3.0 (No "View controller-based status bar appearance")在 XCode 8.2 / Swift 3.0 中更改状态栏样式(没有“查看基于控制器的状态栏外观”)
【发布时间】:2017-06-09 00:25:55
【问题描述】:

我正在尝试修改状态栏的外观(将文本设为白色/将样式设置为“浅色”)。我设法通过将其添加到我的 AppDelegate.swift 文件来设置背景颜色:

let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
let statusBar = statWindow.subviews[0] as UIView
statusBar.backgroundColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)

但是,当我去更改状态栏文本的样式时,即使在“常规”>“部署信息”>“状态栏样式”下更改(将其更改为“轻”)也不起作用。

我也尝试通过 Info.plist 修改状态栏,但是没有“查看基于控制器的状态栏外观”字段(见第二张图)。此外,状态栏样式选项下没有“轻”样式选项(见下图):

状态栏样式选项:

没有视图控制器状态栏字段:

【问题讨论】:

    标签: ios swift statusbar


    【解决方案1】:

    您错过的步骤是 Info.plist。

    打开应用的info.plist文件,将UIViewControllerBasedStatusBarAppearance设置为NO(如下图)。

    注意:如果此密钥尚不存在,则可以通过以下方式添加:

    1) 将鼠标悬停在现有条目上以显示添加/删除图标:

    2) 点击加号图标添加新的键/值对:

    3) 将UIViewControllerBasedStatusBarAppearance 粘贴到关键字段并将其值设置为NO。请注意,取消选择时,密钥将更改为View controller-based status...,但它是同一件事:

    【讨论】:

    • 你错过了我帖子中的一些细节 - 我的 info.plist 中不存在该字段 :( 我添加了第二张图片来向你展示我的 info.plist 文件的样子
    • 我相信@enghong 建议您将该键添加到 Info.plist。您可以将鼠标悬停在应该显示加号/减号图标对的现有条目上,单击加号图标,粘贴建议的键,然后将值设置为 NO(这是我的默认值)。然后,您应该在整个应用程序中都有白色状态栏文本,而无需手动设置每个 UIViewController 子类。至少这对我有用。
    • 这是正确的答案,正是我想要的。设置 BOTH 键后,全局状态栏内容设置为亮,无需代码。
    【解决方案2】:

    在应用程序的每个 UIViewController 中,您应该覆盖 preferredStatusBarStyle 属性:

    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
    

    最后,调用:

    <your controller>.setNeedsStatusBarAppearanceUpdate()
    

    如果此 statusBar 样式贯穿于您的所有应用程序,您应该创建一个实现该样式的 BaseViewController 类,并使您的所有视图控制器都继承自 BaseViewController。

    【讨论】:

    【解决方案3】:

    斯威夫特 3

    如果在 Info.plist 中查看基于控制器的状态栏外观 = YES

    然后将此扩展用于所有 NavigationController

        extension UINavigationController
        {
            override open var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
             }
         }
    

    如果没有 UINavigationController 并且只有 UIViewController 然后使用下面的代码:

        extension UIViewController
        {
            override open var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
             }
         }
    

    目标c

    创建类别类

    对于 UIViewController

    在 UIViewController+StatusBarStyle.h

     @interface UIViewController (StatusBarStyle)
     @end
    

    在 UIViewController+StatusBarStyle.m 中

     #import "UIViewController+StatusBarStyle.h"
    
     @implementation UIViewController (StatusBarStyle)
    
     -(UIStatusBarStyle)preferredStatusBarStyle {
      return UIStatusBarStyleLightContent;
     }
    
     @end 
    

    对于 UINavigationController

    在 UINavigationController+StatusBarStyle.h

     @interface UINavigationController (StatusBarStyle)
     @end
    

    在 UINavigationController+StatusBarStyle.m

     #import "UINavigationController+StatusBarStyle.h"
    
     @implementation UINavigationController (StatusBarStyle)
    
     -(UIStatusBarStyle)preferredStatusBarStyle {
      return UIStatusBarStyleLightContent;
     }
    
     @end  
    

    【讨论】:

      【解决方案4】:

      对于 Xcode 10,您可以简单地为 UIViewController 或 UITableViewController ecc 创建一个类。并将其放在您的 UIViewController 类之前,您可以在所有需要轻量内容状态栏的视图控制器中调用此类...

      class UIViewControllerWithLightStatusBar: UIViewController {
      override var preferredStatusBarStyle: UIStatusBarStyle {
      return UIStatusBarStyle.lightContent
      }
      }
      

      在 AppDelegate 中设置状态栏:

      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
          // Override point for customization after application launch.
      
          UINavigationBar.appearance().isTranslucent = false
          UINavigationBar.appearance().clipsToBounds = false
          UINavigationBar.appearance().barStyle = .blackOpaque
      
          return true
      }
      

      现在你用 UIViewControllerWithLightStatusBar 改变类 UIViewController

      class YourViewController: UIViewControllerWithLightStatusBar {
      ...
      }
      

      就是这样……

      【讨论】:

        猜你喜欢
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        • 2018-09-05
        • 2015-10-09
        相关资源
        最近更新 更多