iOS 8增加了一个超级新的酷功能:当用户滚动时隐藏导航栏。
在viewDidload
中只有一行:
navigationController?.hidesBarsOnSwipe = true
很酷,不是吗?
但现在我有一个小问题:当导航栏被隐藏时,状态栏仍然在这里,并与内容重叠,这是丑陋的。
当导航栏被隐藏时,我应该怎么做才能使其隐藏?
发布于 2014-12-20 05:51:18
在UIViewController上覆盖以下方法:
extension MyViewController {
override func prefersStatusBarHidden() -> Bool {
return barsHidden // this is a custom property
}
// Override only if you want a different animation than the default
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
}
在代码中的某处更新barsHidden
并调用setNeedsStatusBarAppearanceUpdate()
发布于 2014-10-06 20:55:18
我的回答是基于this post上的一些评论,这些评论都是猜测。我不确定这是否会起作用,因为苹果没有给我们任何直接的方式或代理方法,当导航栏隐藏。
将UINavigationBar子类设置为NavigationBar。将属性观察器添加到其hidden
属性,如下所示:
var hidden: Bool{
didSet{
UIApplication.sharedApplication().setStatusBarHidden(self.hidden, animation: .Slide)
}
}
然后,您希望转到主视图控制器中的viewDidLoad
方法,并将self.navigationBar
属性(或self.navigationController.navigationBar
,不确定是哪一个)设置为新NavigationBar类的实例。
请注意,我现在不能测试它,请让我知道它是如何工作的。
发布于 2015-08-27 08:40:28
你可以通过使用UISwipeGestureRecognizer
来检测滑动。我在UIWebView上使用它:
在viewDidLoad中,我有:
let swipeUp = UISwipeGestureRecognizer(target: self, action: "didSwipe")
let swipeDown = UISwipeGestureRecognizer(target: self, action: "didSwipe")
swipeUp.direction = UISwipeGestureRecognizerDirection.Up
swipeDown.direction = UISwipeGestureRecognizerDirection.Down
webView.addGestureRecognizer(swipeUp)
webView.addGestureRecognizer(swipeDown)
navigationController?.hidesBarsOnSwipe = true
我还有一个视图控制器的扩展,叫做WebViewViewController:
extension WebViewViewController {
override func prefersStatusBarHidden() -> Bool {
return hideStatusBar
}
override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
return UIStatusBarAnimation.Slide
}
}
在我的WebViewViewController中的类级别上,我还有:
var hideStatusBar = false
func didSwipe() {
hideStatusBar = true
}
https://stackoverflow.com/questions/26197260
复制相似问题