首页 > 解决方案 > UICollectionViewHeader - 计算复杂视图的大小

问题描述

我有一个 UICollectionReusableView,它有 2 个 UIView 作为子视图,它们本身有不同的视图(例如图像和标签)。这最能代表层次结构。

HeaderView(UICollectionReusableView)
    |-- UIView
           |-- Label
           |-- UIButton
           |-- UIButton
    |--UIView
           |-- UIImageView
           |-- UIStackview
                   |-- UILabel
                   |-- UILabel
           |-- UILabel
           |-- UILabel

现在,我已经放弃了网络以解决这个问题。但我能找到的只是计算UILabel高度。我真的需要知道我是如何计算的。我什至尝试引用标题referenceSizeForHeaderInSection并调用layoutIfNeeded()然后检查帧。但这似乎不起作用。

我真的很想对此进行解释以及如何实现这一目标的解决方案。

标签: iosswiftuitableviewuicollectionview

解决方案


您可以尝试计算 HeaderView 的大小

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {

// if don't use xib file for HeaderView
let header = HeaderView()

// if use xib
let bundle = Bundle(for: HeaderView.self)
let nibName = String(describing: HeaderView.self)
let nib = bundle.loadNibNamed(nibName, owner: HeaderView.self, options: nil)
let header = nib?.first!

// just setup your header with needed data
header.setup(from: yourDataSource)

// set hear needed width
header.setup.frame.size.width = UIScreen.main.bounds.width

header.setNeedsLayout()
header.layoutIfNeeded()

let size = header.systemLayoutSizeFitting(header.frame.size)

return size
}

在标题设置方法中,您设置所有视图

func setup(from data: YourDataSource){
   header.label1.text = data.name
   header.label2.text = data.info
   /// just setup all your field
   ....

}

推荐阅读