我想在 UIScrollView 中嵌入 UICollectionView (我知道这不是好的做法,但我有理由这样做)。我创建了一个 UICollectionView 子类,它根据内容大小设置 intrinsicContentSize
class EmebedableCollectionView: UICollectionView {
override var intrinsicContentSize: CGSize {
let size = self.collectionViewLayout.collectionViewContentSize
let result = CGSize(width: max(size.width,1), height: max(size.height + 20,1))
self.setNeedsLayout()
return result
}
override var contentSize: CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
}
然后在容器视图中,我为集合视图创建高度约束
@IBOutlet weak var productsHeightConstraint: NSLayoutConstraint!
并根据 UICollectionView intrinsicContentSize 对其进行更新
override func viewWillLayoutSubviews() {
for subview in productsContainerView.subviews.first!.subviews where subview is UICollectionView {
productsHeightConstraint.constant = subview.intrinsicContentSize.height
productsContainerView.layoutIfNeeded()
}
}
问题是:容器视图高度不正确,但是当我推送一个新的视图控制器并返回时,它会将高度更新为正确。那么我的代码有什么问题?