2016-10-31 4 views
1

私はUICollectionの上に2つのラベルがあり、コレクションビューでスクロールするときにアニメートする必要があります。基本的には、画面が大きなスクロール可能なビューであるという感じをユーザに与えます。私はそれが小さな画面上でより見やすくするために、次のコードを作ってみたが、それは私が欲しい効果を与えていない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 
    } 
} 

このコードの問題点は、コレクションビューの一部であるかのように、アニメーションの代わりに画面が「ジャンプ」することです。

このコードのもう1つの問題は、他の方向へのスクロールを開始するとすぐに「ジャンプ」することです。 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列にすることをコレクションビュー幅/ 3に設定したいとします。

次に、最初の2つのセルを作成するために別のコレクションビューセルサブクラスを作成し、cellForItemAtIndexPathどちらのindexPathであるかに応じてセルを設定します。

+0

これは素晴らしいことです。先端に感謝します。 –

+0

、あなたの歓迎! – JustinM

関連する問題