我想删除屏幕顶部的状态栏。
这不起作用:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
application.statusBarHidden = true
return true
}
我也试过了:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
var controller = UIViewController()
application.statusBarHidden = true
controller.setNeedsStatusBarAppearanceUpdate()
var view = UIView(frame: CGRectMake(0, 0, 320, 568))
view.backgroundColor = UIColor.redColor()
controller.view = view
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(160, 284)
label.textAlignment = NSTextAlignment.Center
label.text = "Hello World"
controller.view.addSubview(label)
self.window!.rootViewController = controller
self.window!.makeKeyAndVisible()
return true
}
答案 0 :(得分:408)
你真的应该在你的视图控制器上实现prefersStatusBarHidden:
swift 2
override func prefersStatusBarHidden() -> Bool {
return true
}
swift 3及更高版本
override var prefersStatusBarHidden: Bool {
return true
}
答案 1 :(得分:95)
在方法
中添加代码func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
完成!运行您的应用程序,不再有状态栏!
答案 2 :(得分:69)
Swift 3
在Info.plist
设置View controller-based status bar appearance
至NO
并致电UIApplication.shared.isStatusBarHidden = true
答案 3 :(得分:36)
如果您想隐藏并恢复状态栏点击按钮,则在展示和解除滑入式菜单时,弹出窗口< / strong>等,然后你可以使用这个方法: -
隐藏状态栏: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
要恢复状态栏: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal
答案 4 :(得分:32)
如果您更喜欢视觉方法而不是编码,请使用此方法:
在info.plist
只需将View controller-based status bar appearance
添加到NO
和Status bar is initially hidden
为YES
答案 5 :(得分:28)
iOS 10 / Swift 3.0更新
不再是一个功能,现在是一个属性......
override var prefersStatusBarHidden: Bool {
return true
}
答案 6 :(得分:26)
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true);
navigationController?.navigationBar.hidden = true // for navigation bar hide
UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
答案 7 :(得分:15)
:
override func viewWillAppear(_ animated: Bool) {
UIApplication.shared.isStatusBarHidden = true
}
答案 8 :(得分:12)
答案 9 :(得分:12)
所以这里的问题实际上与Swift无关,而是从iOS 7开始处理状态栏的外观。
默认情况下,视图控制器在屏幕上单独控制状态栏的外观。如果要使用此方法来控制状态栏,可以为要修改外观的任何视图控制器覆盖以下方法:
prefersStatusBarHidden
,
preferredStatusBarStyle
,
preferredStatusBarAnimation
,
在您的情况下,您只需实施prefersStatusBarHidden
并返回true
。
另一种方法是在应用程序级别控制状态栏外观。这似乎是您实际尝试做的事情(通过设置application.statusBarHidden
)。
为了完成这项工作,您需要打开应用的Info.plist
文件并添加密钥UIViewControllerBasedStatusBarAppearance
,并将其值设为NO
。
答案 10 :(得分:8)
我实际上是自己想出来的。我将添加我的解决方案作为另一种选择。
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
答案 11 :(得分:6)
就我而言,我需要根据某些情况更新隐藏的状态栏。
因此,我创建了一个包含新属性BaseViewController
的基本控制器hideStatusBar
。
其他视图控制器是此基本控制器的子类。最后,当我要更新状态栏行为时,只需更改此hideStatusBar
值。
class BaseViewController: UIViewController {
var hideStatusBar: Bool = false {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return hideStatusBar
}
}
final class ViewController: BaseViewController, UIScrollViewDelegate {
let scrollView = UIScrollView()
...
func scrollViewDidScroll(_ scrollView: UIScrollView) {
UIView.animate(withDuration: 0.3) {
if scrollView.contentOffset.y > 100 {
self.hideStatusBar = true
} else {
self.hideStatusBar = false
}
}
}
}
这是一个演示,我正在使用UIView.animate(...)
使过渡更加顺畅。
答案 12 :(得分:4)
好的,所以这对我来说是个问题,因为iOS 9并不支持人们在这里提到的方法,例如UIApplication.sharedApplication().statusBarHidden = true
或
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
和强>
override func prefersStatusBarHidden() -> Bool {
return true
}
有效,但不提供可编程解决方案,我可以在条件上进行更改。
(我们之前已经完成了statusBarHidden = true
和statusBarHidden = false
)。
解决这种疯狂行为:
通过添加到prefersStatusBarHidden()
,如下所示,您可以通过编程方式控制隐藏和显示状态栏,而无需在 info.plist 中添加UIViewControllerBasedStatusBarAppearance
设置:
var showStatusBar = true
override func prefersStatusBarHidden() -> Bool {
if showStatusBar {
return false
}
return true
}
private func showStatusBar(enabled: Bool) {
showStatusBar = enabled
prefersStatusBarHidden()
}
然后在整个代码中使用它:
//Hide Status Bar
showStatusBar(false)
OR
//Show Status Bar
showStatusBar(true)
答案 13 :(得分:3)
添加,当覆盖prefersStatusBarHidden
方法或变量时,Info.plist中的View controller-based status bar appearance
必须为YES,否则覆盖将无效
答案 14 :(得分:3)
在我的情况下,我正在寻找状态栏来隐藏/按需显示;而不是仅在视图加载或消失时。
swift 3.x
//show status bar initially
var showStatusBar = true
//set the parameters
override var prefersStatusBarHidden: Bool {
if showStatusBar == true {
//does not prefer status bar hidden
print("does not prefer status bar hidden")
return false
} else {
//does prefer status bar hidden
print("does prefer status bar hidden")
return true
}
}
//ex: hide status bar and call parameter function again whenever you want
showStatusBar = false
setNeedsStatusBarAppearanceUpdate()
答案 15 :(得分:3)
在Swift 4.2中,它现在是一个属性。
override var prefersStatusBarHidden: Bool {
return true
}
答案 16 :(得分:2)
在您的项目General-&gt; Deployment Info-&gt;状态栏样式中 选择隐藏状态栏的复选标记 注意: - 它会在整个应用程序中隐藏状态栏
答案 17 :(得分:1)
对我有用的解决方案;如果要在加载时隐藏特定视图控制器上的状态栏:
import UIKit
class ViewController: UIViewController {
private var hideStatusBar: Bool = false
override var prefersStatusBarHidden: Bool {
return hideStatusBar
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundcolor = .white
hideStatusBar = true
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
注意:如果您设置了密钥&#34; 查看基于控制器的状态栏外观&#34;到&#34; 否&#34;在您的info.plist中,上面的代码不起作用。您应该将密钥设置为&#34; 是&#34;或从info.plist中删除
答案 18 :(得分:1)
Swift 4
//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false
//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true
答案 19 :(得分:1)
对于Swift 4+,请尝试以下代码(在Swift 4.0、4.1-IOS 10、11上测试):
override var prefersStatusBarHidden: Bool { return true }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// call this func to force preferredStatusBarStyle to be read again.
setNeedsStatusBarAppearanceUpdate()
}
答案 20 :(得分:0)
已针对iOS 13和Swift 5更新
如果以上答案均不适合您。检查您的plist以查看是否具有此功能:
“基于视图控制器的状态栏外观”
如果是这样,请确保将其设置为“是!!!!!”
然后下面的代码将起作用。
override var prefersStatusBarHidden: Bool {
return true
}
答案 21 :(得分:0)
迅速5: 在主视图控制器中,或者在主导航控制器中(如果有)
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override var prefersStatusBarHidden: Bool {
return false
}
并且plist中的“基于View Controller的状态栏外观”必须为YES,否则将不会调用上述代码。
如果要在启动应用程序时隐藏状态栏, plist中的“状态栏最初是隐藏的”必须为YES。 这样可以防止在屏幕顶部显示额外的蓝色条时启动图像失真。
答案 22 :(得分:0)
如果以模态方式显示视图控制器,请尝试
viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
答案 23 :(得分:0)
在您的项目 - &gt;常规 - &gt;部署信息
中状态栏样式: -
刚刚标记为隐藏状态栏(iOS 10)
答案 24 :(得分:0)
您可以在ViewController
Class
scope
open override var prefersStatusBarHidden: Bool { return true }
答案 25 :(得分:0)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.isStatusBarHidden = true
return true
}
答案 26 :(得分:0)
我正在使用Xcode 8.1(8B62),部署目标设置为10.1,我对上面提到的覆盖选项没有太多运气。但是,检查部署信息中的“隐藏状态栏”选项对我来说很有用。
我希望这会有所帮助。