2017-09-27 88 views
1

我有這樣的方法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

檢查我的答案,這在我的項目中工作,所以我與你分享 –

回答

2
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 –