scrollViewDidScroll崩溃的iOS调用self.setNeedsStatusBarAppearanceUpdate()当11

问题描述:

我有这样的方法scrollViewDidScroll崩溃的iOS调用self.setNeedsStatusBarAppearanceUpdate()当11

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if scrollView is GLIndexedCollectionView { return } 

    if scrollView.contentOffset.y >= 120 && self.navBarHidden == true { 
     self.navBarHidden = false 
     self.setNeedsStatusBarAppearanceUpdate() 

     self.topTvConstraint.constant = 44.0 
     self.view.layoutIfNeeded() 

     self.navigationBarConstraint.constant = 65 

     UIView.animate(withDuration: 0.2, delay: 0.0, options: .curveEaseOut, animations: { 
      self.view.layoutIfNeeded() 
      }, completion: nil) 

     var scrollBounds = self.tv.bounds 
     scrollBounds.origin = CGPoint(x: 0, y: 185) 
     self.tv.bounds = scrollBounds 

    } 
} 

的想法是动画顶栏和更改状态栏的颜色,所以我用setNeedsStatusBarAppearanceUpdate到

override var preferredStatusBarStyle: UIStatusBarStyle { 
    if navBarHidden { 
     return .lightContent 
    } 

    return .default 
} 

但....如果我在Xcode 9编译并在真实的设备或仿真器与iOS 11它碰撞在该行运行它

self.setNeedsStatusBarAppearanceUpdate() 

如果我尝试iOS 10.3按预期工作,为什么?请任何帮助!

enter image description here

+0

您必须检查设备版本,才能调用此方法 –

+0

但该方法在iOS11中不被弃用,是不是? – goseta

+0

检查我的答案,这在我的项目中工作,所以我与你分享 –

if #available(iOS 11.0, *) { 
    setNeedsUpdateOfScreenEdgesDeferringSystemGestures() 
} else { 
    setNeedsStatusBarAppearanceUpdate() 
} 

注:这是iOS中11小而显著变化如果依靠隐藏状态栏用手势在屏幕边缘,你应该更新自己的应用,并覆盖setNeedsUpdateOfScreenEdgesDeferringSystemGestures为iOS 11.

+1

所以这是强制重新评估覆盖var preferredStatusBarStyle的新方法:UIStatusBarStyle ??? 现在,我知道这另一块代码,但是在这里崩溃的同一块 的一部分! () 这是怎么回事?你在哪里得到这个信息?顺便说一句,谢谢你的帮助 – goseta

+0

https://useyourloaf.com/blog/avoiding-conflicts-with-system-gestures-at-screen-edges/从这里@ goseta –