グリッド内にセルを表示するコレクションビューが必要です。だから標準的なフローレイアウトは私のためにうまくいきます。しかし、セルの高さは、セルに置くオートレイアウトの制約によって決定されるはずですが、1行に表示するセルの数を教えたいと思います。ここに私のセルレイアウトです:autolayoutだけでUICollectionViewのセルの高さを決定する
それは非常に簡単です - 画像ビューとその下の2つのラベル。画像ビューはのアスペクト比の制約(1:1)を持っています。これは、セルの幅がわかっているときはいつでも、自動レイアウトルールによって高さが自動的に認識されることを意味します(cellTop-image-label1 -label2-cellbottom)。 「
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let availableWidth = collectionView.frame.width - padding
let widthPerItem = availableWidth/itemsPerRow
return CGSize(width: widthPerItem, height: widthPerItem)
}
あなたが見ることができるように、私はドン以来:私は、行ごとに2つの項目を表示するにはコレクションビューを伝えるために、他の良い方法を知らないので、今
、私はUICollectionViewDelegateFlowLayout
メソッドをオーバーライドしていますアイテムの高さを知っています。幅と同じものを返します。オートレイアウトが後でそれを修正することを望みます。私はまた、全体のメカニズムが働き始めるためにestimatedItemSize
を設定しました。
結果はかなり奇妙です - コレクションビューは、イベントは大部分がラベルの長さに応じて、考慮に私が返す幅を取らないように思える:
私はいくつかの他のを見てきました人々は手作業で幅のセルサイズを計算することを推奨しています。たとえば、「自分でレイアウトしてから測定し、次にこの幅のサイズを教えてください」というように、セルフサイズを計算することをお勧めします。手動でサイズを混乱させることなくこれを行う方法があるかどうかを知る。
私はすべて自動レイアウトで処理することを望んでいました。ハードコードされた高さは実際の高さが画面のサイズによって異なるため、機能しません。 – frangulyan