preferredStatusBarStyle不起作用

时间:2017-07-28 11:38:16

标签: ios objective-c swift xcode statusbar

我曾经在我的项目中使用setStatusBarStyle并且它工作正常,但它已被弃用,因此我使用preferredStatusBarStyle,但这并不起作用。 知道我已经:

  1. 调用方法setNeedsStatusBarAppearanceUpdate。
  2. 设置"查看基于控制器的状态栏外观"在info.plist中为NO
  3. 覆盖功能

    • (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }

    此功能未被调用

  4. 注意:我正在使用导航控制器。

1 个答案:

答案 0 :(得分:23)

以下是关于状态栏更改的Apple Guidelines/Instruction

如果要设置状态栏样式,应用程序级别,请在UIViewControllerBasedStatusBarAppearance文件中将NO设置为.plist。并在您的appdelegate> didFinishLaunchingWithOptions添加以下ine(以编程方式,您可以从app delegate中执行此操作)。

目标C

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

<强>夫特

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

如果要设置状态栏样式,请在视图控制器级别执行以下步骤:

  1. 如果您只需要在UIViewController级别设置状态栏样式,请在UIViewControllerBasedStatusBarAppearance文件中将YES设置为.plist
  2. 在viewDidLoad添加功能 - setNeedsStatusBarAppearanceUpdate

  3. 覆盖视图控制器中的preferredStatusBarStyle。

  4. 目标C

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self setNeedsStatusBarAppearanceUpdate];
    }
    
    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return UIStatusBarStyleLightContent;
    }
    

    <强>夫特

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    

    根据状态栏样式设置级别设置.plist的值。

    enter image description here

    您可以在应用程序启动期间或视图控制器的viewDidLoad期间为状态栏设置背景颜色。

    extension UIApplication {
    
        var statusBarView: UIView? {
            return value(forKey: "statusBar") as? UIView
        }
    
    }
    
    // Set upon application launch, if you've application based status bar
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
            return true
        }
    }
    
    
    or 
    // Set it from your view controller if you've view controller based statusbar
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        }
    
    }
    



    结果如下:

    enter image description here