如何在 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 中实例化一个标头。我们将使用它来计算大小。
将标题设置为所需的宽度(在我的情况下为集合视图的宽度),并使用所需的文本和图像对其进行配置
致电setNeedsLayout
和layoutIfNeeded
。
使用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 中动态大小的单元格?