自动布局为每个 collectionViewCell 计算相同的高度

Posted

技术标签:

【中文标题】自动布局为每个 collectionViewCell 计算相同的高度【英文标题】:Auto layout calculating same height for each collectionViewCell 【发布时间】:2016-02-01 15:20:27 【问题描述】:

所以我有一个集合视图,它使用我在 Github 上找到的名为 CHTCollectionViewWaterfallLayout 的自定义布局,到目前为止我很喜欢它,但是我希望使我制作的自定义集合视图单元格在高度上是动态的,并且我有连接自动布局来计算这个的麻烦。我在 Github 上分享了一个简单的示例项目,它生成随机字符串大小并显示它们,唯一的问题是自动布局为每个集合视图单元格生成相同的单元格高度。该项目可以在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 对我来说是一个相对较新的布局过程,所以我很想了解我在这里做错了什么。希望我对每个人都清楚,谢谢!

【问题讨论】:

这可能会有所帮助:***.com/questions/18746929/… 嗯谢谢你的参考!当我第一次学习如何调整大小的单元格时,我引用了该页面的一大堆 UITableView。我会放一些专注的音乐,希望我能解决这个问题! 【参考方案1】:

我想通了!我没有做的是对我创建的自定义单元格设置宽度限制!呸!

【讨论】:

以上是关于自动布局为每个 collectionViewCell 计算相同的高度的主要内容,如果未能解决你的问题,请参考以下文章

动态调整 collectionViewCell 的常量以在自动布局中使用

使用单个 XIB 和类创建多个 collectionviewcells

如何在单元格大小更改后自动调整 CollectionViewCell 中的内容大小?

collectionViewCells 到 collectionView 位置 x:0, y:0

创建酷炫的 CollectionViewCell 转换动画

创建酷炫的 CollectionViewCell 转换动画