如何在UICollectionView中动态调整标题视图的大小?

时间:2015-10-28 22:21:08

标签: ios swift ios8 uicollectionview uicollectionviewlayout

我在UICollectionView中有头(UICollectionReusableCell),其高度需要是可变的。我如何根据其内容的高度调整自己的大小?

需要支持iOS 7,而Autolayout解决方案更受欢迎(如果存在)。

2 个答案:

答案 0 :(得分:8)

这就是我解决它的方式。我希望它更优雅。

  1. 在标题视图中设置UILabel,使numberOfLines值为0.这样可以自行调整大小。
  2. 将标题移出故事板并进入xib。
  3. collectionView(_:layout:referenceSizeForHeaderInSection:)中实例化xib中的标头。我们会用它来计算尺寸。
  4. 将标题设置为所需的宽度(在我的情况下是集合视图的宽度),并使用所需的文本和图像对其进行配置
  5. 致电setNeedsLayoutlayoutIfNeeded
  6. 使用systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)计算身高。
  7. 以CGSize
  8. 的形式返回高度和宽度

    注意:

    • 标题必须移出故事板并移入xib,因为从dequeuReusableSupplementaryViewOfKind调用systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)会导致崩溃。

    • 标题视图必须能够计算正确的高度,只知道其内容和所需的宽度。这需要一些摆弄约束。

答案 1 :(得分:-2)

这是我的方法 -

  1. 为标题和内容创建出口。
  2. 获取内容的高度
  3. 将标题的高度设置为内容的百分比
  4. 在视图控制器中 -

        func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    
        let cell = yourCollectionView.dequeueReusableCellWithReuseIdentifier("YourCustomCell", forIndexPath: indexPath) as! YourCustomeCell
        ...
        cell.setUpCell()
        return cell
    }
    

    在View Cell中 -

    @IBOutlet weak var headerView: UIView!
    @IBOutlet weak var contentView: UIView!
    func setUpCell() {
        let percentageYouWant = 0.3
        let newFrame = CGRect(x: 0, y: 0, width: contentView * percentageYouWant, height: contentView * percentageYouWant)
        headerView.frame = newFrame
    }