所以我有一个集合视图,它使用我在Github上发现的一个名为CHTCollectionViewWaterfallLayout的自定义布局我到目前为止都喜欢它,但是我希望自定义集合视图单元格在高度上变得动态,而我我无法连接自动布局来计算这个。我在Github上共享了一个简单的示例项目,它生成随机字符串大小并显示它们,唯一的问题是Auto Layout为每个Collection View Cell生成相同的单元格高度。该项目可以找到here。
为了让您了解我的思考过程,我使用方法CHTCollectionViewDelegateWaterfallLayout
sizeForItemAtIndexPath计算单元格高度。因为我也使用委托方法columnCountforSection
,因为我根据方向提供了有限数量的列,我采用collectionView框架宽度,然后除以列数以获得单元格的宽度。
func collectionView (collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
var cell = dict["heightCell"] as? CollectionViewCell
let randomString = RadomStrings[indexPath.item]
let float = CGFloat(columnCount)
let width = collectionView.bounds.size.width / float
if cell == nil {
cell = NSBundle.mainBundle().loadNibNamed("CollectionViewCell", owner: self, options: nil)[0] as? CollectionViewCell
dict["heightCell"] = cell
}
cell?.RandomStringLabel.text = randomString
cell!.frame = CGRectMake(0, 0, CGRectGetWidth(collectionView.bounds), CGRectGetHeight(cell!.frame))
cell!.setNeedsLayout()
cell!.layoutIfNeeded()
var size = cell?.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
size?.width = width
return CGSize(width: width, height: size!.height)
}
我的约束非常基本。我对每个轴都有约束。一个位于内容视图的顶部,前导,尾随和底部。我在标签上的高度大于或等于45.
使用自动布局来计算TableViewCell高度对我来说很容易,我喜欢它,因为我喜欢这种高度计算方法背后的DRY原理。所以我想在我的应用程序中保持这个高度计算过程相同。 CollectionViews对我来说是一个相对较新的布局过程,所以我很想知道我在这里做错了什么。希望我对每个人都很清楚,谢谢!
答案 0 :(得分:1)
我明白了!我没做的是在我创建的自定义单元格上放置宽度约束!咄!