preferredStatusBarStyle不起作用

Sar*_*rah 8 xcode objective-c statusbar ios swift

我曾经setStatusBarStyle在我的项目中使用,它工作正常,但它已被弃用,所以我使用preferredStatusBarStyle,但没有用.知道我:

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

    • (UIStatusBarStyle)preferredStatusBarStyle {return UIStatusBarStyleLightContent; }

    此函数未被调用

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

Kru*_*nal 29

以下是有关状态栏更改的Apple指南/说明.

如果要设置状态栏样式,则应用程序级别将设置UIViewControllerBasedStatusBarAppearanceNO您的.plist文件.并在您的appdelegate> didFinishLaunchingWithOptions添加以下ine(以编程方式,您可以从应用程序委托).

目标C.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
Run Code Online (Sandbox Code Playgroud)

迅速

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

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

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

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

目标C.

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
Run Code Online (Sandbox Code Playgroud)

迅速

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


您可以在应用程序启动期间或视图控制器的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
    }

}
Run Code Online (Sandbox Code Playgroud)



结果如下:

在此输入图像描述


  • 这是唯一对我有用的东西,但已弃用。 (2认同)
  • 我在这里添加了我的答案,请查看。/sf/answers/3976116231/ (2认同)