【问题标题】:Lag / Screen Freezes when hiding Status Bar dynamically in a Scroll View (Swift 3)在滚动视图中动态隐藏状态栏时滞后/屏幕冻结(Swift 3)
【发布时间】:2017-04-16 16:36:15
【问题描述】:

我目前正在使用带有不同页面的Scroll View。我的目标是在一个特定页面上隐藏Status Bar。每次Status Bar 即将重新出现/消失时,都会有一个非常烦人的滞后并且屏幕冻结

这是我的方法:

首先我定义了两个变量

private var currentPage = 0

private var isStatusBarPreferablyHidden = true

然后,当用户滑动到第一页时,我使用 Scroll View Delegate 中的两个函数调用 setNeedsStatusBarAppearanceUpdate

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    let currentScrollPosition : CGFloat = self.navigation.contentOffset.x / self.navigation.frame.size.width
    currentPage = lroundf(Float(currentScrollPosition))
}

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {

    if currentPage == 0 {

        isStatusBarPreferablyHidden = true
    } else {

        isStatusBarPreferablyHidden = false
    }

    self.setNeedsStatusBarAppearanceUpdate()
}

最后我重写了状态栏函数来更新状态栏的外观。

override var prefersStatusBarHidden: Bool {

    return isStatusBarPreferablyHidden
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {

    return UIStatusBarAnimation.none
}

【问题讨论】:

    标签: swift uiviewcontroller uiscrollview swift3 statusbar


    【解决方案1】:

    删除scrollViewWillBeginDecelerating。 试试:

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let currentScrollPosition : CGFloat = scrollView.contentOffset.x / scrollView.frame.size.width
        let page = lroundf(Float(currentScrollPosition))
        if page != currentPage {
            currentPage = page
            if currentPage == 0 {
                isStatusBarPreferablyHidden = true
            } else {
                isStatusBarPreferablyHidden = false
            }
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
    

    【讨论】:

    • 这根本不会改变任何东西!同样的滞后,甚至不能正常工作。很抱歉,但这个答案并不能解决任何问题-.-
    • @Devapploper 滞后是什么意思。我测试你的代码。改成scrollViewWillBeginDragging 后就好了。
    • 每当状态栏即将改变时,滚动视图和所有其他内容都会冻结大约 1/2 秒。这与使用的委托方法无关
    • @Devapploper 看看我的解决方案是否符合您的要求。
    • 非常感谢您的帮助,并且您的代码可以正常工作,就像我的一样。但这不是重点。我发布这个问题的原因是,从带有状态栏的视图转换到没有状态栏的视图会导致屏幕冻结一点。这个答案并不能解决问题,但我非常感谢您的努力和帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2014-10-30
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多