如何在swift中逐渐隐藏状态栏

Posted

技术标签:

【中文标题】如何在swift中逐渐隐藏状态栏【英文标题】:How to hide status bar gradually in swift 【发布时间】:2016-06-23 09:04:20 【问题描述】:

我有一个表格视图控制器。当用户向上滚动表格时,我想逐渐隐藏 iphone 状态栏(包括电池、WIFI 等的顶部)。我知道如何通过实现 prefersStatusBarHidden() 方法来隐藏状态栏。但它不会在表格向上滚动时隐藏它。所以我希望它成为表格的一部分。它应该能够随着桌子的移动而移动。

【问题讨论】:

Proper way to hide status bar on ios, with animation and resizing root view的可能重复 【参考方案1】:

没有办法移动状态栏;它是可见的或隐藏的。但是,您可以通过将UITableView 即将滚动时的状态替换为包含包含状态栏的屏幕截图的UIView 来解决此问题。

我将从UIScrollViewDelegate. 开始,因为UITableViewDelegateUIScrollViewDelegate, 的子类,您可以在视图控制器中将UITableView 的委托设置为self. 有了这个,您现在可以聆听滚动动作。

UITableView 位于顶部并且用户向下滚动时,我建议截取状态栏的屏幕截图,将其添加到UIView,然后以与UITableView 正在移动(请参阅 UIScrollViewDelegate 文档以获取帮助)。同样,当滚动到顶部时,我会让视图向下移动到状态栏的位置,然后移除视图,并将状态栏设置为可见。

使用此方法,您可以看到状态随表格视图上下移动的外观。

【讨论】:

【参考方案2】:

最初你得到 UItableview 的滚动方向,然后根据方向设置为 BOOL 值

func scrollViewDidScroll(scrollView: UIScrollView) 
   if(scrollView.panGestureRecognizer.translationInView(scrollView.superview).y > 0)

    print("up")
   UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade)  //.Slide

else

    print("down")
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: .Fade)  //.Slide


UIApplication.sharedApplication().setStatusBarHidden 在 iOS9 中已弃用

选择 2

 crete one global Value for get the current position
var hide:Bool = false

 func scrollViewDidScroll(scrollView: UIScrollView) 
   if(scrollView.panGestureRecognizer.translationInView(scrollView.superview).y > 0)

    print("up")
   hide = true


else

    print("down")
   hide = false


  UIView.animateWithDuration(0.5)  () -> Void in
        self.setNeedsStatusBarAppearanceUpdate()
    



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

override func prefersStatusBarHidden() -> Bool 
    return hide

【讨论】:

【参考方案3】:

试试这个

func scrollViewDidScroll(scrollView: UIScrollView)

    UIApplication.sharedApplication().statusBarHidden = true


func scrollViewDidEndDecelerating(scrollView: UIScrollView)

    UIApplication.sharedApplication().statusBarHidden = false

【讨论】:

它可以工作,但它不会随着表格向上滚动而隐藏。 试试这个:***.com/questions/30271271/…

以上是关于如何在swift中逐渐隐藏状态栏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift iOS 应用程序中隐藏状态栏?

隐藏导航栏时隐藏状态栏 - SWIFT iOS8

如何使用点击手势(iOS8 / Swift)在 pageViewController 上显示/隐藏状态栏

如何在 Swift 中使 iPhone 状态栏透明?

swift3.0 顶部状态栏隐藏

Swift/iOS 8,当 prefersStatusBarHidden() 设置为 true 时,状态栏不隐藏