2016-11-15 2 views
0

私は自己サイジングアイテムでUICollectionView(flowLayout)を実装しようとしています。iOS UICollectionViewに自己サイジングアイテムがありますか?

実装は非常に簡単です。estimateItemSizeを設定し、UICollectionViewCell制約を設定してサイズを管理しています。

collectionViewが作成された後、最初のデータのリロード時にはすべて正常に動作しますが、別のリロードでは上部のいくつかのアイテムがestimatedItemSizeと同じサイズになります。上下にスクロールすると、アイテムのサイズが再びよく見えます。

私は、この問題でさまざまなセルの制約を実験し、collectionViewの周りのさまざまな場所やその他のものでsetNeedsLayoutを試してみることに費やしました。それはバグですか?

答えて

0

this post私は自分の答えを見つけたという面白い問題がありました。私の

minimumInteritemSpacingForSectionAtIndex 
insetForSectionAtIndex 
sizeForItemAtIndexPath 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionView, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { 
    return 0 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsMake(0, 0, 0, 0) 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { 
    let screenRect: CGRect = collectionView.bounds 
    let screenWidth: CGFloat = screenRect.size.width 
    let cellWidth: CGFloat = screenWidth/24 
    //Replace the divisor with the column count requirement. Make sure to have it in float. 
    let size: CGSize = CGSize(width: cellWidth, height: cellWidth) 
    return size 
} 

最大の秘密はにあなたの意見を取り付けるには注意がすることですスウィフトでそれらを使用して2つの重要な機能がありますサイジングの目的のために適切に使用されますトレーリングエッジとボトムレイアウト。先頭と上にのみアタッチする場合は、フレームまたは制約を使用してプログラムで幅と高さを設定できます。私は個人的なプロジェクトでは、私の意見では機能がややクリーナーになっているので、私はそれを他の方法でやったことがありますが、制約を実行することはもう少し簡単です。

できるだけ多くのセルレイアウトをcellForItemAtの内部で実行してください。

関連する問題