在滚动视图中动态隐藏状态栏时滞后/屏幕冻结(Swift 3)
Posted
技术标签:
【中文标题】在滚动视图中动态隐藏状态栏时滞后/屏幕冻结(Swift 3)【英文标题】:Lag / Screen Freezes when hiding Status Bar dynamically in a Scroll View (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
【问题讨论】:
【参考方案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 看看我的解决方案是否符合您的要求。
非常感谢您的帮助,并且您的代码可以正常工作,就像我的一样。但这不是重点。我发布这个问题的原因是,从带有状态栏的视图转换到没有状态栏的视图会导致屏幕冻结一点。这个答案并不能解决问题,但我非常感谢您的努力和帮助! :)以上是关于在滚动视图中动态隐藏状态栏时滞后/屏幕冻结(Swift 3)的主要内容,如果未能解决你的问题,请参考以下文章