我目前在不同的页面上使用 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/