首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >滚动时隐藏状态栏

滚动时隐藏状态栏
EN

Stack Overflow用户
提问于 2014-10-05 05:16:15
回答 4查看 10.3K关注 0票数 19

iOS 8增加了一个超级新的酷功能:当用户滚动时隐藏导航栏。

viewDidload中只有一行:

代码语言:javascript
复制
navigationController?.hidesBarsOnSwipe = true

很酷,不是吗?

但现在我有一个小问题:当导航栏被隐藏时,状态栏仍然在这里,并与内容重叠,这是丑陋的。

当导航栏被隐藏时,我应该怎么做才能使其隐藏?

EN

回答 4

Stack Overflow用户

发布于 2014-12-20 05:51:18

在UIViewController上覆盖以下方法:

代码语言:javascript
复制
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()

票数 14
EN

Stack Overflow用户

发布于 2014-10-06 20:55:18

我的回答是基于this post上的一些评论,这些评论都是猜测。我不确定这是否会起作用,因为苹果没有给我们任何直接的方式或代理方法,当导航栏隐藏。

将UINavigationBar子类设置为NavigationBar。将属性观察器添加到其hidden属性,如下所示:

代码语言:javascript
复制
var hidden: Bool{
didSet{
    UIApplication.sharedApplication().setStatusBarHidden(self.hidden, animation: .Slide)
}
}

然后,您希望转到主视图控制器中的viewDidLoad方法,并将self.navigationBar属性(或self.navigationController.navigationBar,不确定是哪一个)设置为新NavigationBar类的实例。

请注意,我现在不能测试它,请让我知道它是如何工作的。

票数 0
EN

Stack Overflow用户

发布于 2015-08-27 08:40:28

你可以通过使用UISwipeGestureRecognizer来检测滑动。我在UIWebView上使用它:

在viewDidLoad中,我有:

代码语言:javascript
复制
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:

代码语言:javascript
复制
extension WebViewViewController {
    override func prefersStatusBarHidden() -> Bool {
        return hideStatusBar
    }

    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
        return UIStatusBarAnimation.Slide
    }
}

在我的WebViewViewController中的类级别上,我还有:

代码语言:javascript
复制
var hideStatusBar = false

func didSwipe() {
    hideStatusBar = true   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26197260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档