UICollectionViewHeader-计算复杂视图的大小

时间:2019-07-05 21:22:19

标签: ios swift uitableview uicollectionview

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

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

现在,我已在网上报废了该问题的解决方案。但是我能找到的只是计算UILabel的高度。我真的需要知道我该如何精确计算。我什至尝试在referenceSizeForHeaderInSection中引用标头并调用layoutIfNeeded(),然后检查帧。但这似乎不起作用。

我真的很喜欢对此的解释,以及如何实现这一目标的解决方案。

1 个答案:

答案 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
   ....

}