Dev*_*per 6 statusbar uiscrollview uiviewcontroller swift swift3
我目前正在使用Scroll View不同的页面.我的目标是隐藏Status Bar在一个特定的页面上.有一个非常烦人的滞后,每次重新出现/消失时屏幕都会冻结Status Bar.
这是我的方法:
首先,我定义了两个变量
private var currentPage = 0
private var isStatusBarPreferablyHidden = true
Run Code Online (Sandbox Code Playgroud)
然后我使用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()
}
Run Code Online (Sandbox Code Playgroud)
最后,我覆盖状态栏功能以更新状态栏的外观.
override var prefersStatusBarHidden: Bool {
return isStatusBarPreferablyHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.none
}
Run Code Online (Sandbox Code Playgroud)
消除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()
}
}
Run Code Online (Sandbox Code Playgroud)