extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
// 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.green
}
}
or
// 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.green
return true
}
}
5条答案
按热度按时间8yparm6h1#
它看起来像一个黑客的把戏,但你可以试试这个:
您可以在应用程序启动期间或视图控制器的viewDidLoad期间设置状态栏的背景颜色。在这里,它以以下方式为我工作。
结果如下:
laawzig22#
你必须应用不同的约束。您的背景颜色应该延伸到安全区域之外,一直延伸到超级视图。因此,您的约束需要设置为superview的背景色,但安全区为您的ui视图(按钮,tableViews等)
jyztefdp3#
最近我在解决一个类似的问题。不同的是,在我看来,顶部的不安全区域必须填补,而底部的不需要。另一个区别是,我的背景视图实际上是在
scrollView
中,这使得约束设置更加复杂。我尝试了上面提到的
"statusBar"
解决方案,但我猜自iOS 13以来视图层次结构已经改变,因此这将导致崩溃。最后,我提出了解决问题的方法:
首先,在视图控制器视图的最顶部添加状态栏Bg视图,将其顶部、前导和尾部与安全区域的顶部、前导和尾部对齐(代码中为
statusBarBgView
)。同时,将原始填充背景(bgView
)的顶部约束设置为状态栏Bg视图的底部。然后在
viewDidLoad()
中,调用以下方法:注意,通过用
statusBarBgView
的bottomAnchor约束bgView
的topAnchor,可以避免滚动时两个视图之间的差距。2w3kk1z54#
对于那些仍然在寻找这个问题的人。我最简单的解决方案是创建一个uiview并约束它
然后以这种方式限制它。设置bottomSafeArea(或topSafeArea)
最后给它上色
hl0ma9xz5#