如何隐藏iOS 9中单个视图控制器的状态栏?
在我以模态方式呈现的ViewController中,我这样做了:
override func prefersStatusBarHidden() -> Bool { return true }
这曾经工作,但不再有效。 只有这个视图控制器隐藏状态栏的最好方法是什么?
对于Swift 3和Swift 4,它已经改变为重写一个像这样的variables:
override var prefersStatusBarHidden: Bool { return true }
如果你想在视图控制器已经被显示的时候“更新”状态,你将需要调用:
setNeedsStatusBarAppearanceUpdate()
请参阅文档 。
对于Swift 3和Swift 4,当视图出现时
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) UIApplication.shared.isStatusBarHidden = true }
当查看goint到Dissapear
override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) UIApplication.shared.isStatusBarHidden = false }
在iOS 9,Xcode 7,Swift 2.0中,它回到了以前的样子。
override func prefersStatusBarHidden() -> Bool { return true }
事实上,Xcode会告诉你
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .None)
已被弃用,您应该使用prefersStatusBarHidden方法。
在你的UIViewController中:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIApplication.shared.isStatusBarHidden = true } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) //It will show the status bar again after dismiss UIApplication.shared.isStatusBarHidden = false } override var prefersStatusBarHidden: Bool { return true }
对于Swift 3,
override var prefersStatusBarHidden: Bool{ return true }
并添加viewDidLoad()
self.modalPresentationCapturesStatusBarAppearance = true
您可以使用
override public func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) // hide status bar dispatch_async(dispatch_get_main_queue(), { if let window = UIApplication.sharedApplication().keyWindow { window.windowLevel = UIWindowLevelStatusBar + 1 } }) } override public func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) // Show status bar dispatch_async(dispatch_get_main_queue(), { if let window = UIApplication.sharedApplication().keyWindow { window.windowLevel = UIWindowLevelNormal } }) }
对于那些仍在苦苦挣扎的人来说,下面的作品适用于iOS9。
您可以通过从您的个人/子孙viewControllers调用它来更新rootViewController prefersStatusBarHidden函数。 这适用于将childViewControllers直接添加到rootViewController的地方。
你不需要在info.plist中设置任何东西,但是设置设置'statusBarIsInitiallyHidden'独立于下面的工作。
首先,在你的rootViewController中添加如下内容:
-(void)viewDidLoad { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateStatusBarAppearance:) name:@"kStatusBarAppearance" object:nil]; } -(void)updateStatusBarAppearance:(NSNotification *)n { statusBarIsHidden = [n.object boolValue]; [self setNeedsStatusBarAppearanceUpdate]; } -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; //optional } -(BOOL)prefersStatusBarHidden{ return statusBarIsHidden; }
然后,在要隐藏状态栏的单个视图控制器中,调用以下命令:
-(void)viewDidLoad { [[NSNotificationCenter defaultCenter] postNotificationName:@"kStatusBarAppearance" object:[NSNumber numberWithBool:true]]; } -(void)popSelf { [[NSNotificationCenter defaultCenter] postNotificationName:@"kStatusBarAppearance" object:[NSNumber numberWithBool:false]]; }
使用此代码:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) UIApplication.shared.isStatusBarHidden = true }
如果此代码不起作用,则需要在info.plist中添加此密钥
查看基于控制器的状态栏外观 – NO
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .None)
当你想把它放回一个独立的VC时:
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: .None)
- iOS远程通知没有收到,除非从Xcode运行
- 在Swift中获取Cocoa Touch Framework项目版本string
- 当video使用AVPLayer播放时,会停止背景音乐ios
- NSURLSession从崩溃中恢复
- Swift Memoization调用语法的解释
- 无法将types'NSRange'(aka'_NSRange')的值转换为期望的types'Range <Index>'(又名'Range <String.CharacterView.Index>')
- 以编程方式显示或隐藏UIToolbar中的UIBarButtonItem
- 时间比较迅速
- 正确引用dispatch_async中的self