UICollectionViewのセルの高さを、コレクションビューの高さと同じにするにはどうすればよいですか?次のコードは、コレクションビューの高さが現時点ではわからないため、自動レイアウトがこの段階でプロパティを使いこなしているように見えるため、機能しません。セルの高さが実際のコレクションビューより高くなります。UICollectionViewCellとUICollectionViewの等高さ
私はこれを解決する答えに賞金300を追加します!
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: collectionView.frame.size.height)
}
2015年12月16日18:43:53.643マイアプリ[1055:434762]ので コードhereUICollectionViewFlowLayoutが定義されていない入力の挙動:2015年12月16日 18: 43:53.643 My-app [1055:434762]アイテムの高さは、UICollectionViewの高さからセクションのインセットの上端と下端を差し引いた値からコンテンツの上下の値を差し引いた値よりも小さくする必要があります。 2015-12-16 18:43:53.643 My-app [1055:434762] 代理人が返す値を確認してください。 2015-12-16 18:43:53.644 My-app [1055:434762]関連する UICollectionViewFlowLayoutインスタンスがあり、それが添付されています。層=; contentOffset:{0、0}; contentSize:{3087、307}> コレクションビューのレイアウト:。 2015-12-16 18:43:53.644 My-app [1055:434762] デバッガでUICollectionViewFlowLayoutBreakForInvalidSizesでシンボリックブレークポイント を作成します。
hannadsの提案に基づいて動作するソリューションです。より良い方法があれば教えてください
プロパティオブザーバでプロパティを作成しました。
var myCollectionViewHeight: CGFloat = 0.0 {
didSet {
if myCollectionViewHeight != oldValue {
myCollectionView.collectionViewLayout.invalidateLayout()
myCollectionView.collectionViewLayout.prepareLayout()
}
}
}
オーバーライドこのメソッド(それが複数回呼び出される)
override func viewDidLayoutSubviews() {
myCollectionViewHeight = myCollectionView.bounds.size.height
}
それから私は私のデリゲートでこれを持っている:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: myCollectionViewHeight)
}
これは遠く離れているわけではありません。私は完全な答えで私の質問を更新します。 – LuckyLuke
ただし、これはコレクションビューを最初に1回、レイアウトを無効にした後に1回レイアウトします。最も効率的なソリューションではなく、私が知っているソリューションです。あなたの更新を待っています。 – hannad
@LuckyLukeあなたは 'viewDidLayoutSubviews'が複数回呼び出されたと述べました。私は、 'didSet'は' myCollectionViewHeight'がセットされるたびに呼び出されると思います。 'myCollectionViewHeight'が' myCollectionView.bounds.size.height'と等しくないかどうかを確認するためにifステートメントを追加してから設定することができますか?それが助けになるかもしれない。 – hannad