【问题标题】:UIScrollView dynamic status barUIScrollView 动态状态栏
【发布时间】:2016-03-27 01:32:36
【问题描述】:

我有一个包含 2 个视图的滚动视图:一个 UIImagePicker(Snapchat 风格的相机视图)和一个 UITableView。

滚动视图位于主 viewController 推送到的导航控制器内部。我希望状态栏及其上的所有内容(时间、电池、wifi 等)都隐藏在相机视图中,但是当您向右滚动到 tableView 时,状态栏内容会重新显示,无论他们是否做了一些滚动时的一种很酷的拉伸动画(弄清楚这一点会很棒)或任何其他可能的解决方案。

希望我的措辞足以让您理解。

【问题讨论】:

    标签: ios swift uiscrollview uinavigationcontroller uistatusbar


    【解决方案1】:

    你试过打电话吗

    UIApplication.sharedApplication().setStatusBarHidden(hidden: Bool, withAnimation: UIStatusBarAnimation)
    

    在适当的时机(不建议这样做,因为您必须将其设置回离开视图时的状态,以便您知道)

    或者覆盖方法

    override func prefersStatusBarHidden() -> Bool {
        code
    }
    

    在你的控制器中?

    【讨论】:

    • 我已经在我的视图中实现了 prefersStatusBarHidden,但由于某种原因,它就像它被覆盖,因为视图在滚动视图中,或者因为它们在导航控制器中。不确定父滚动视图或导航控制器是否覆盖了我的状态栏设置。
    • @EthanSchatzline 好吧,在这种情况下,您是否向布尔值“YES”添加了一个带有键“基于控制器的状态栏外观”的新行?
    • Info.plist 文件中的@EthanSchatzline
    • 只是这样做了,但并没有什么不同。所以基于 View 控制器的状态栏外观设置为 YES 并且在 cameraView 中 preferesStatusBarHidden 返回 true
    • @EthanSchatzline lemme 构建您的场景并稍后回复您
    【解决方案2】:

    我找到的解决方案(更多解决方法) 声明一个名为 hidden 的布尔值。 然后我覆盖了这些方法:

    func scrollViewDidScroll(scrollView: UIScrollView){
        let xOffset = scrollView.contentOffset.x;
    
    
        if(xOffset > scrollView.contentSize.width/4)
        {
            if hidden == true {
                print("\nShow status bar\n")
    
                hidden = false
                UIView.animateWithDuration(0.3, animations: {
                    self.setNeedsStatusBarAppearanceUpdate()
                })
            }
        } else
        {
           print("\nHide Status Bar\n")
    
            hidden = true
            UIView.animateWithDuration(0.2, animations: {
                self.setNeedsStatusBarAppearanceUpdate()
            })
        }
    }
    
    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
        if hidden == false {
            return UIStatusBarAnimation.Fade
        } else {
            return UIStatusBarAnimation.Slide
        }
    }
    
    override func prefersStatusBarHidden() -> Bool {
        print("\nstatus Bar Changed to hidden = \(hidden)\n")
        return hidden
    }
    

    一旦您至少滚动一半,它会淡入状态栏,一旦您再次返回一半,它就会将状态栏滑回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多