1. ホーム
  2. ios

[解決済み] UICollectionViewの高さを、UICollectionViewのコンテンツサイズの高さに調整するには?

2022-10-27 17:06:22

質問

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)を返します。 を返すため、height30(XIBファイルでheightに設定した値、constaint >=30にしていますが)の値まで縮みすぎてしまいます。

どのように解決するのですか?

以下をお勧めします。

  1. コレクションビューに高さ制約を追加します。
  2. その優先順位を999に設定します。
  3. その定数を、ストーリーボード上で適度に見えるようにする任意の値に設定します。
  4. コレクションビューのボトムイコール制約をgreater or equalに変更します。
  5. 高さ制約をアウトレットに接続します。
  6. コレクションビューのデータを再読み込みするたびに以下を実行します。

また、コンテンツサイズに追加することで、コレクションビューのInsetを考慮することができます。

コードサンプルです。

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

説明します。おまけ、理解できたら読まなくていいんだよ。

UIは、制約の優先順位がどうであれ、すべての制約を反映しようとします。の優先順位が低い高さ制約があるため、UIはすべての制約を反映しようとします。 (999) 高さ制約定数が親ビューの高さより小さい値に設定される場合は常に、コレクションビューは与えられた高さに等しくなり、両方の制約を達成します。

しかし、高さの制約定数が親ビューの高さよりも大きい値に設定された場合、両方の制約を達成することはできません。したがって、より高い優先順位を持つ制約のみが達成され、それは大きいか等しい底の制約です。

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