【问题标题】:How to set statusBar color on iPhoneX?如何在 iPhone 上设置状态栏颜色?
【发布时间】:2017-12-04 03:57:30
【问题描述】:

我使用navigationController,我隐藏了navigationBar,如何在iPhoneX 上设置statusBar 颜色? 我不想设置 self.view.backgroundColor

iPhoneX 缺口颜色

【问题讨论】:

标签: iphone-x


【解决方案1】:
UIView *statusBar = (UIView *)[[UIApplication sharedApplication] valueForKey:@"statusBar"];
statusBar.backgroundColor = [UIColor greenColor];

【讨论】:

    【解决方案2】:

    这是一个在应用程序启动期间或视图控制器的 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
        }
    
    }
    



    结果如下:

    【讨论】:

    • 方法对我很有效。你的第一个实现的简化是application.statusBarView?.backgroundColor = .red,因为UIApplication 的实例被传递到函数中,不需要调用你的单例实例。
    • 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“在 UIApplication 上调用 -statusBar 或 -statusBarWindow 的应用程序:必须更改此代码,因为不再有状态栏或状态栏窗口。在窗口场景中使用 statusBarManager 对象。'
    【解决方案3】:

    斯威夫特 4

    func setStatusBarBackgroundColor(_ color: UIColor) {
        guard let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else { return }
        statusBar.backgroundColor = color
    }
    

    【讨论】:

    • *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“在 UIApplication 上调用 -statusBar 或 -statusBarWindow 的应用程序:必须更改此代码,因为不再有状态栏或状态栏窗口.在窗口场景中使用 statusBarManager 对象。'
    • IOS 13 / iPhone 11 Pro Max 崩溃
    • 这里是 iOS 13 的答案:stackoverflow.com/a/58524665/7851379
    【解决方案4】:

    在 Interface Builder 中,我只是在 0x0、44px 高和与顶级视图相同的宽度处添加了一个视图,然后将此视图设置为所需的背景颜色。这改变了状态栏的背景颜色,而不影响视图背景颜色。

    就我而言,我需要这样的东西,因为我屏幕的上半部分是一种颜色,而下半部分是另一种颜色。我没有看到另一种让状态栏与顶部颜色匹配且主页按钮区域与底部颜色匹配的方法。

    如果额外的视图妨碍了 iPhone X 以外的设备,这可以很容易地以编程方式完成。在我的情况下,它不会在其他设备上造成问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多