swift - 在 ScrollView 中动态隐藏状态栏时滞后/屏幕卡住 (Swift 3)

标签 swift uiviewcontroller uiscrollview swift3 statusbar

我目前在不同的页面上使用 Scroll View。我的目标是在一个特定页面上隐藏 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
}

最佳答案

删除 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()
    }
}

关于swift - 在 ScrollView 中动态隐藏状态栏时滞后/屏幕卡住 (Swift 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920817/

相关文章:

ios - iPad屏幕右半部分的模态视图?

ios - 无法返回上一界面

ios - UI ScrollView 未按预期滚动

ios - 用 nil var 初始化惰性 var 是否安全(或良好的编程风格)?

ios - 如何在不进入无限循环的情况下调配 NSError init

swift - 不可变字典值变化

swift - NSAsynchronousFetchRequest 可能的内存泄漏

ios - 呈现多个模态视图 Controller ?

ios - 放大 UIScrollView - 无法缩放到单个图像之外并滚动

objective-c - UIScrollView 在拖动和点击之间做出决定