0

我想在 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()
    }
}

问题是:容器视图高度不正确,但是当我推送一个新的视图控制器并返回时,它会将高度更新为正确。那么我的代码有什么问题?

4

0 回答 0