我无法在高度等于collectionView的contentSize的tableviewcell中设置collectionview。我知道UICollectionView无法利用重复使用的好处,但这就是我要实现的UI(检查附件)。
复杂之处在于collectionView占tableViewCell区域的0.6(AutoLayout宽度),但是高度是动态的,collectionview可以容纳该单元格的数目(最小单元格宽度为60,最大单元格宽度= 100)。
因此CollectionView的高度计算取决于自动布局的宽度。
因为在layoutSubview期间将知道collectionview的宽度,所以我用一个虚拟的高度150初始化了heightConstraint(我在这里可能是错误的),然后将其重置(停用约束,更改常量为实际值,再次激活约束)稍后在layoutSubviews中的实际计算值。结果,我最初得到的高度为150,而在滚动时,高度可以正确反映。
TLDR;我想使用自动布局来设置collectionview的宽度,但是collectionview的高度取决于它可以适应其宽度的单元格数量,而我无法在同一运行循环中实现此功能。 :/
代码段:
_filesCollectionView.filesCollectionViewHeightConstraint = NSLayoutConstraint.init(item: _filesCollectionView, attribute: .height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 150)
NSLayoutConstraint.activate([_filesCollectionView.filesCollectionViewHeightConstraint])
_filesCollectionView.mas_makeConstraints { (make) in
make?.left.equalTo()(self.dividerView.mas_right)?.offset()(10)
make?.right.equalTo()(self.contentView)?.with().offset()(-10)
make?.top.equalTo()(self.contentView)?.with().offset()(10)
make?.bottom.equalTo()(self.contentView)?.with().offset()(-10)
}
LayoutSubview代码段:
let heightOffset = self.computeNewHeight()
if(filesCollectionViewHeightConstraint.constant != 150) {
NSLayoutConstraint.deactivate([filesCollectionViewHeightConstraint])
filesCollectionViewHeightConstraint.constant = heightOffset == 0 ? 30 : heightOffset
NSLayoutConstraint.activate([filesCollectionViewHeightConstraint])
}
p.s。我已将Tableview委托设置为返回autoDimension,