UItableViewCell中的UICollectionView,网格视图布局

时间:2018-10-01 15:08:23

标签: ios swift uitableview uicollectionview ios-autolayout

我无法在高度等于collectionView的contentSize的tableviewcell中设置collectionview。我知道UICollectionView无法利用重复使用的好处,但这就是我要实现的UI(检查附件)。

复杂之处在于collectionView占tableViewCell区域的0.6(AutoLayout宽度),但是高度是动态的,collectionview可以容纳该单元格的数目(最小单元格宽度为60,最大单元格宽度= 100)。

因此CollectionView的高度计算取决于自动布局的宽度。

因为在layoutSubview期间将知道collectionview的宽度,所以我用一个虚拟的高度150初始化了heightConstraint(我在这里可能是错误的),然后将其重置(停用约束,更改常量为实际值,再次激活约束)稍后在layoutSubviews中的实际计算值。结果,我最初得到的高度为150,而在滚动时,高度可以正确反映。

TLDR;我想使用自动布局来设置collectionview的宽度,但是collectionview的高度取决于它可以适应其宽度的单元格数量,而我无法在同一运行循环中实现此功能。 :/

滚动前 enter image description here

滚动后 After scrolling

代码段:

_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,

0 个答案:

没有答案