UICollectionView の高さを UICollectionView のコンテンツ サイズの高さに調整するにはどうすればよいでしょうか? 質問する

UICollectionView の高さを UICollectionView のコンテンツ サイズの高さに調整するにはどうすればよいでしょうか? 質問する

空きスペースがたくさんあるので、UICollectionView (赤いもの) をコンテンツ サイズの高さ (この場合は UICollectionViewCells (黄色いもの)) まで縮小したいと思います。私が試したのは、次の方法です。

override func layoutSubviews() {
    super.layoutSubviews()
    if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) {
        self.invalidateIntrinsicContentSize()
    }
}

override var intrinsicContentSize: CGSize {
    return self.collection.contentSize
}

しかし、return self.collection.contentSize常に (width, 0) を返すため、高さ 30 の値に縮小しすぎてしまいます (高さの値は XIB ファイルで設定していますが、制約 >= 30 があります)。

ここに画像の説明を入力してください

ベストアンサー1

私は次のことを提案します:

  1. コレクション ビューに高さの制約を追加します。
  2. 優先度を 999 に設定します。
  3. ストーリーボード上で適切に表示される任意の値に定数を設定します。
  4. コレクション ビューの下部の等号制約を「より大きいか等しい」に変更します。
  5. 高さ制約をコンセントに接続します。
  6. コレクション ビューでデータをリロードするたびに、次の操作を実行します。

コレクション ビューのインセットをコンテンツ サイズに追加して検討することもできます。

コードサンプル:

CGFloat height = myCollectionView.collectionViewLayout.collectionViewContentSize.height
heightConstraint.constant = height
self.view.setNeedsLayout() Or self.view.layoutIfNeeded()

説明: 余談ですが、理解できるなら読む必要はありません。当然です!!

UIは、優先順位に関係なくすべての制約を反映しようとします。優先順位の低い高さの制約があるため、(999)、およびより大きいか等しいタイプの下部制約。高さ制約定数が親ビューの高さよりも小さい値に設定されている場合、コレクション ビューは指定された高さと等しくなり、両方の制約が達成されます。

ただし、高さ制約定数が親ビューの高さより大きい値に設定されている場合、両方の制約を満たすことはできません。したがって、優先度の高い制約、つまり、より大きいか等しい下部制約のみが満たされます。

以下は経験からの推測です。つまり、1つの制約は達成できます。しかし、エラー達成されなかった他の低優先度制約の結果UIできるだけ低くしたがって、コレクション ビューの高さは親ビューのサイズと同じになります。

おすすめ記事