UICollectionView不调用intrinsicContentSize

Ben*_*ime 2 ios autolayout uicollectionview uicollectionviewlayout

我有一个UICollectionViewController生成具有随机颜色的细胞用于测试目的.既然UICollectionViewController嵌入了a UIScrollView,我希望scrollView与它的大小相同contentSize.

我创建了一个子类UICollectionView,实现了intrinsicContentSize方法,并将UICollectionView我的类设置为IB中的自定义类.但是intrinsicContentSize永远不会被称为.我有一个完全相同的设置UITableView并在那里它完美无缺.

有什么想法吗?

- (CGSize)intrinsicContentSize {
    [self layoutIfNeeded];
    return CGSizeMake(UIViewNoIntrinsicMetric, self.contentSize.height);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rry 11

正确的答案是做这样的事情

- (CGSize)intrinsicContentSize
{
    return self.collectionViewLayout.collectionViewContentSize;
}
Run Code Online (Sandbox Code Playgroud)

每当您认为需要更改时调用-invalidateContentSize(例如在reloadData之后).

在Interface Builder中,您可能需要设置占位符内在大小约束以避免错误.

这是-intrinsicContentSize的子类化和重写,如果你想增长一个集合视图的框架,直到它被一个兄弟或父视图约束