我有一个UICollectionReusableView,其中有2个UIView作为子视图,它们本身具有不同的视图(例如图像和标签)。这最能代表层次结构。
HeaderView(UICollectionReusableView)
|-- UIView
|-- Label
|-- UIButton
|-- UIButton
|--UIView
|-- UIImageView
|-- UIStackview
|-- UILabel
|-- UILabel
|-- UILabel
|-- UILabel
现在,我已在网上报废了该问题的解决方案。但是我能找到的只是计算UILabel
的高度。我真的需要知道我该如何精确计算。我什至尝试在referenceSizeForHeaderInSection
中引用标头并调用layoutIfNeeded()
,然后检查帧。但这似乎不起作用。
我真的很喜欢对此的解释,以及如何实现这一目标的解决方案。
答案 0 :(得分:0)
您可以尝试在
中计算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
....
}