ios - preferredStatusBarStyle 不工作

标签 ios objective-c swift xcode statusbar

<分区>

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

  1. 调用方法 setNeedsStatusBarAppearanceUpdate。
  2. 在 info.plist 中将“View controller-based status bar appearance”设置为 NO
  3. 覆盖函数

    • (UIStatusBarStyle)preferredStatusBarStyle { 返回 UIStatusBarStyleLightContent;

    这个函数没有被调用

注意:我正在使用导航 Controller 。

最佳答案

这里是 Apple Guidelines/Instruction关于状态栏的变化。

如果你想设置状态栏样式,那么在你的.plist文件中将UIViewControllerBasedStatusBarAppearance设置为NO。在您的 appdelegate > didFinishLaunchingWithOptions 中添加以下代码(您可以通过应用程序委托(delegate)以编程方式完成)。

Objective-C

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

swift

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

如果要设置状态栏样式,请在 View Controller 级别执行以下步骤:

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

  3. 在您的 View Controller 中覆盖 preferredStatusBarStyle。

Objective-C

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

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

swift

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

enter image description here


您可以在应用程序启动期间或 View Controller 的 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


关于ios - preferredStatusBarStyle 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372550/

相关文章:

ios - 如何在 iOS 中将字符串转换为 xml? ( Objective-C ,xcode 7.2)

iphone开发: is it possible to extend more than one viewControllers?

ios - 将 viewController 的标题更改为 tabbarController

ios - 这是什么意思? "alienPosition = alien.position"

ios - 将滚动 Controller 添加到 CollectionView

ios - 如何获得核心定位工作

ios - Gradle Xcode 插件 - xcodebuild 任务失败

ios - : "Property type "JSQMessagesCollectionView"is incompatible with type "UICollectionView",继承自 "UICollectionViewLayout"是什么意思

ios - 核心数据 : How do I delete all objects with an attribute in Swift?

ios - 删除具有淡入淡出效果的单元格时 UItableView 挂起