der*_*ida 52 statusbar ios uistatusbar swift swift3
在XCode 7.3.x中,我使用以下命令更改了StatusBar的背景颜色:
func setStatusBarBackgroundColor(color: UIColor) {
guard let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
return
}
statusBar.backgroundColor = color
}
Run Code Online (Sandbox Code Playgroud)
但似乎这不再适用于Swift 3.0.
我尝试过:
func setStatusBarBackgroundColor(color: UIColor) {
guard let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
return
}
statusBar.backgroundColor = color
}
Run Code Online (Sandbox Code Playgroud)
但它给了我:
this class is not key value coding-compliant for the key statusBar.
Run Code Online (Sandbox Code Playgroud)
任何想法如何使用XCode8/Swift 3.0进行更改?
Cal*_*lam 141
extension UIApplication {
var statusBarView: UIView? {
if responds(to: Selector(("statusBar"))) {
return value(forKey: "statusBar") as? UIView
}
return nil
}
}
UIApplication.shared.statusBarView?.backgroundColor = .red
Run Code Online (Sandbox Code Playgroud)
Dan*_*cas 51
"更改"状态栏背景颜色:
let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor(red: 32/255, green: 149/255, blue: 215/255, alpha: 1.0)
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)
Run Code Online (Sandbox Code Playgroud)
更改状态栏文字颜色:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Run Code Online (Sandbox Code Playgroud)
更新:请注意,旋转视图时状态栏框架将更改.您可以通过以下方式更新创建的子视图框架:
statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] NSNotification.Name.UIApplicationWillChangeStatusBarOrientationviewWillLayoutSubviews()abd*_*lek 29
使用Swift 3和4,您可以使用下面的代码片段.它UIApplication使用valueForKeyPath设置它的背景颜色来查找视图.
guard let statusBarView = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else {
return
}
statusBarView.backgroundColor = UIColor.red
Run Code Online (Sandbox Code Playgroud)
Objective-C的
UIView *statusBarView = [UIApplication.sharedApplication valueForKeyPath:@"statusBarWindow.statusBar"];
if (statusBarView != nil)
{
statusBarView.backgroundColor = [UIColor redColor];
}
Run Code Online (Sandbox Code Playgroud)
对于Xcode 9和iOS 11: 我们将尝试实现的状态栏样式是带有白色内容的状态栏。转到ViewController.swift文件并添加以下代码行。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Run Code Online (Sandbox Code Playgroud)
或从项目设置选项中,您可以更改状态栏的样式:
接下来,返回到情节提要,选择“视图控制器”,然后在“编辑器”菜单中选择“嵌入到导航控制器中”。选择导航栏,然后在“属性检查器”中将“栏色调”颜色设置为红色。故事板将如下所示。

生成并运行项目,状态栏的内容再次变暗,这是默认设置。原因是,iOS要求导航控制器的状态栏样式,而不是所包含的视图控制器。
要更改应用程序内部所有导航控制器的样式,请在AppDelegate.swift文件中更改以下方法。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().barStyle = .blackOpaque
return true
}
Run Code Online (Sandbox Code Playgroud)
再次生成并运行项目,这一次状态栏的内容变为白色。
我有一个自定义解决方案,用于在 iOS 13 及更低版本上更改状态栏。以下是如何做到这一点:
if #available(iOS 13.0, *) {
let app = UIApplication.shared
let statusBarHeight: CGFloat = app.statusBarFrame.size.height
let statusbarView = UIView()
statusbarView.backgroundColor = UIColor.red
view.addSubview(statusbarView)
statusbarView.translatesAutoresizingMaskIntoConstraints = false
statusbarView.heightAnchor
.constraint(equalToConstant: statusBarHeight).isActive = true
statusbarView.widthAnchor
.constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
statusbarView.topAnchor
.constraint(equalTo: view.topAnchor).isActive = true
statusbarView.centerXAnchor
.constraint(equalTo: view.centerXAnchor).isActive = true
} else {
let statusBar = UIApplication.shared.value(forKeyPath:
"statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.red
}
Run Code Online (Sandbox Code Playgroud)
另外,请查看文章iOS 13 如何更改状态栏颜色?
最后一件事,您仍然可以使用以下命令更改状态栏样式:
override var preferredStatusBarStyle : UIStatusBarStyle {
return UIStatusBarStyle.lightContent
//return UIStatusBarStyle.default // Make dark again
}
Run Code Online (Sandbox Code Playgroud)
小智 5
对于iOS 11和Xcode 9,请使用以下步骤.
创建UIApplication类的扩展:
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
在您的班级或您想要更改状态栏的背景颜色的任何位置:
UIApplication.shared.statusBarView?.backgroundColor = .red
对于状态栏的轻量级内容或暗内容,只需转到Info.plist并添加值为NO的以下值行.
查看基于控制器的状态栏外观
| 归档时间: |
|
| 查看次数: |
54547 次 |
| 最近记录: |