2016-10-31 1 views
1

UICollection 위에 두 개의 레이블이 있으며 콜렉션 뷰에서 스크롤 할 때 애니메이션을해야합니다. 기본적으로 사용자에게 화면이 하나의 큰 스크롤보기가 가능하다는 느낌을줍니다. 나는 그것이 작은 화면에 잘 보이게하기 위해 다음 코드로 왔어요하지만 나에게 내가 원하는 효과를 포기하지 않을 것UICollectionView를 스크롤하는 동안 NSLayoutConstraint에 애니메이션 적용

enter image description here

:

내보기 인터페이스 빌더에서 다음과 같습니다 :

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 
    if(velocity.y>0){ 
     if Device.IS_3_5_INCHES() { 
      self.topConstraint.constant = -100 
     } 
     if Device.IS_4_INCHES() { 
      self.topConstraint.constant = -70 
     } 
     if Device.IS_4_7_INCHES() { 
      self.topConstraint.constant = 0 
     } 
     if Device.IS_5_5_INCHES() { 
      self.topConstraint.constant = 0 
     } 
    }else{ 
     self.topConstraint.constant = 50 
    } 
} 

이 코드의 문제점은 마치 콜렉션보기의 일부인 것처럼 화면이 애니메이션 대신 움직입니다.

이 코드의 다른 문제는 다른 방향으로 스크롤을 시작하자 마자 '뒤로 이동'합니다. UIScrollView의 맨 위 또는 맨 아래에 있더라도 상관 없습니다. TopConstraint를 50으로 다시 설정하면 맨 위에있을 때만 행복합니다. 여기

+0

대안으로 컬렉션보기 헤더를 사용할 수 있습니까? – Danoram

+0

왜 첫 번째 2 셀이 전체 행을 차지하고 각 셀 안에 레이블을 넣는 것이 아닌가? – JustinM

+0

나는 무엇이든 열어. 스크롤 할 때 헤더가 사라 집니까? –

답변

1

는 컬렉션 뷰의 폭으로 처음 두 세포를 설정하는 방법입니다 :

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 

let insets = collectionView.contentInset 
let collectionViewWidth = collectionView.frame.width - (insets.left + insets.right + 1) 
let collectionViewHeight = collectionView.frame.height - (insets.top + insets.bottom) 

    switch indexPath.row { 
    case 0, 1: 

    return CGSize(width: collectionViewWidth, height: collectionViewHeight/8) 

     default: 
    return CGSize(width: collectionViewWidth/3, height: collectionViewHeight/8) 
    } 
} 

당신은 당신이 원하는 비율을 얻을 수에 의해 높이를 나눌 얼마나 변경할 수 있습니다. 기본값과 동일합니다. 첫 번째 2 이후의 모든 셀을 3 행으로 나누려면 collectionViewWidth/3을 사용합니다.

그런 다음 첫 번째 두 셀을 만들고 cellForItemAtIndexPath에서 다른 콜렉션 뷰 셀 서브 클래스를 만들면 확인할 수 있습니다 어느 indexPath인지에 따라 셀을 설정하십시오.

+0

잘 작동합니다. 팁 고마워. –

+0

확실한 귀하 환영합니다! – JustinM