rap*_*ael 14 hidden statusbar modalviewcontroller ios
尝试从模态视图中隐藏状态栏.
已经检查了几种方法:
override func prefersStatusBarHidden() -> Bool {
return true
}
with / without self.setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)
也
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade)
Run Code Online (Sandbox Code Playgroud)
但在iOS 9中折旧
这适用于全屏演示(模态segue演示选项),但在全屏幕上注意这是我的设置.
如果你有任何想法..
Wom*_*ble 49
对于View Controller 的非全屏演示,您需要使用该modalPresentationCapturesStatusBarAppearance属性.
例如
toViewController.modalTransitionStyle = .coverVertical
toViewController.modalPresentationStyle = .overFullScreen
toViewController.modalPresentationCapturesStatusBarAppearance = true
fromViewController.present(toViewController,
animated: true,
completion: nil)
Run Code Online (Sandbox Code Playgroud)
要获得View Controller 的全屏演示,您需要:
modalPresentationStyle.prefersStatusBarHidden在新VC中覆盖UIViewControllerBasedStatusBarAppearance值设置为YES例如
toViewController.modalTransitionStyle = .coverVertical
toViewController.modalPresentationStyle = .fullScreen
fromViewController.present(toViewController,
animated: true,
completion: nil)
Run Code Online (Sandbox Code Playgroud)
(是的,iOS中的状态栏设置非常糟糕.难怪Stack Overflow在这个问题上有很多问题,而且答案也很多.)
要在执行全屏模式时隐藏状态栏,您需要在 viewDidLoad 中设置:
override func viewDidLoad() {
super.viewDidLoad()
modalPresentationCapturesStatusBarAppearance = true
}
Run Code Online (Sandbox Code Playgroud)
然后执行标准方法隐藏状态栏:
override var prefersStatusBarHidden: Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)
确实对于FullScreen状态栏更新会自动调用,但对于OverFullScreen.
此外,在我的例子中,我需要处理堆栈中的导航控制器,以将ModalViewController作为子对象传递:
extension UINavigationController {
public override func childViewControllerForStatusBarHidden() -> UIViewController? {
return self.visibleViewController
}
public override func childViewControllerForStatusBarStyle() -> UIViewController? {
return self.visibleViewController
}
}
Run Code Online (Sandbox Code Playgroud)
在ModalViewController内部,我们手动更新状态栏,也是为了使其平滑,我们必须在 中执行此操作viewWillDisappear,但此时visibleViewController仍然是ModalViewController,没有什么可以使用内部 bool statusBarHidden 并相应地更新它
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.statusBarHidden = true
self.setNeedsStatusBarAppearanceUpdate()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.statusBarHidden = false
self.setNeedsStatusBarAppearanceUpdate()
}
override func prefersStatusBarHidden() -> Bool {
return self.statusBarHidden
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12971 次 |
| 最近记录: |