空きスペースがたくさんあるので、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
私は次のことを提案します:
- コレクション ビューに高さの制約を追加します。
- 優先度を 999 に設定します。
- ストーリーボード上で適切に表示される任意の値に定数を設定します。
- コレクション ビューの下部の等号制約を「より大きいか等しい」に変更します。
- 高さ制約をコンセントに接続します。
- コレクション ビューでデータをリロードするたびに、次の操作を実行します。
コレクション ビューのインセットをコンテンツ サイズに追加して検討することもできます。
コードサンプル:
CGFloat height = myCollectionView.collectionViewLayout.collectionViewContentSize.height
heightConstraint.constant = height
self.view.setNeedsLayout() Or self.view.layoutIfNeeded()
説明: 余談ですが、理解できるなら読む必要はありません。当然です!!
UIは、優先順位に関係なくすべての制約を反映しようとします。優先順位の低い高さの制約があるため、(999)、およびより大きいか等しいタイプの下部制約。高さ制約定数が親ビューの高さよりも小さい値に設定されている場合、コレクション ビューは指定された高さと等しくなり、両方の制約が達成されます。
ただし、高さ制約定数が親ビューの高さより大きい値に設定されている場合、両方の制約を満たすことはできません。したがって、優先度の高い制約、つまり、より大きいか等しい下部制約のみが満たされます。
以下は経験からの推測です。つまり、1つの制約は達成できます。しかし、エラー達成されなかった他の低優先度制約の結果UIできるだけ低くしたがって、コレクション ビューの高さは親ビューのサイズと同じになります。