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

Posted

技术标签:

【中文标题】如何在 UICollectionView 中动态调整标题视图的大小?【英文标题】:How can I dynamically resize a header view in a UICollectionView? 【发布时间】:2015-10-28 22:21:08 【问题描述】:

我在一个高度需要可变的 UICollectionView 中有标题(一个 UICollectionReusableCell)。如何让它根据内容的高度自行调整大小?

我确实需要支持 ios 7,并且自动布局解决方案更可取(如果存在的话)。

【问题讨论】:

您可以尝试在没有 XIB 文件的情况下执行此操作,如下所述:***.com/a/42367674/1306884 【参考方案1】:

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

    将标题视图中的UILabel 设置为numberOfLines 值为0。这将让它自行调整大小。 将标题移出情节提要并移入 xib。 在collectionView(_:layout:referenceSizeForHeaderInSection:) 中从xib 中实例化一个标头。我们将使用它来计算大小。 将标题设置为所需的宽度(在我的情况下为集合视图的宽度),并使用所需的文本和图像对其进行配置 致电setNeedsLayoutlayoutIfNeeded。 使用systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 计算高度。 将高度和宽度返回为 CGSize

注意事项:

必须将标头移出情节提要并移入 xib,因为从 systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 调用 dequeuReusableSupplementaryViewOfKind 会导致崩溃。

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

【讨论】:

这几乎对我有用。我必须创建并添加宽度约束,而不是设置框架/边界。在调用 systemLayoutSizeFittingSize 之前 谢谢。此外,如果您关心性能并且只使用一个带有一个标题的部分,则可以将标题初始化移动到viewDidLoad 而不是collectionView(_:layout:referenceSizeForHeaderInSection:)【参考方案2】:

这将是我的方法 -

    为您的标题和内容创建出口。 获取内容的高度 将标题的高度设置为内容的百分比

在您的视图控制器中 -

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell = yourCollectionView.dequeueReusableCellWithReuseIdentifier("YourCustomCell", forIndexPath: indexPath) as! YourCustomeCell
    ...
    cell.setUpCell()
    return 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

【讨论】:

对不起,我应该更清楚。我的标头是 UICollectionReusableView,而不是 UICollectionViewCell 的一部分。我已经编辑了我的问题以使其更清楚。

以上是关于如何在 UICollectionView 中动态调整标题视图的大小?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何快速在uicollectionview中动态访问单元格属性

如何在 UICollectionView 的部分标题中动态添加标签和按钮?

如何让 Storyboard 支持 UICollectionView 中动态大小的单元格?

如何在 UICollectionView 上动态实现 Sections?

如何在 Swift 中动态更改包含 UICollectionView 单元格的 UITableView 单元格的高度?