2017-09-27 1 views
1

나는이 방법이scrollViewDidScroll 충돌 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 

    } 
} 

아이디어는 상단 바를 애니메이션 및 상태 표시 줄의 색상을 변경하는 것입니다, 그래서

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

    return .default 
} 
에 setNeedsStatusBarAppearanceUpdate를 사용

하지만 .... 내가 엑스 코드 9 컴파일이 줄 아이폰 OS (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 용 setNeedsUpdateOfScreenEdgesDeferringSystemGestures을 무시할 상태 표시 줄을 숨기기에 의존하는 경우 이것은 아이폰 OS (11)의 작지만 큰 변화입니다 11.

+1

그래서 이것은 재정의 재평가를 강제하는 새로운 방법이다 preferredStatusBarStyle : UIStatusBarStyle ??? 지금이 코드 조각을 알고 있지만 같은 블록의 일부입니다 충돌이 발생했습니다 !! self.view.layoutIfNeeded() 무슨 일 이니? 어디서이 정보를 얻을 수 있습니까? 도움을 주셔서 감사합니다 – goseta

+0

https://useyourloaf.com/blog/avoiding-conflicts-with-system-gestures-at-screen-edges/ 여기에서 @goseta –

관련 문제