UICollectionView的Header的高度取决于它在Swift中的内容

时间:2017-07-10 07:02:25

标签: swift dynamic uicollectionview height uicollectionreusableview

UICollectionView内,HeaderView内有UILabelnumberOfLines设置为零可根据文本更改标签height。我希望标题的height依赖于标签的frame

PS。 UICollectionView中的HeaderView并不像common view甚至UITableViewCell那么简单。与UICollectionReusableView不同,此功能非常简单。

1 个答案:

答案 0 :(得分:0)

使用此功能查找标签的高度: -

func labelHeight(width:CGFloat , font:UIFont , text:String)->CGFloat{
    let label:UILabel = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.byWordWrapping
    label.font = font
    label.text = text
    label.sizeToFit()
    return label.frame.height
}

将此UICollectionViewDelegateFlowLayout方法添加到您的控制器中,并在此处找到高度和返回标头大小

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize{
  let height = labelHeight(width: collectionView.bounds.width, font:pass the labelFont here , text:"Pass label text here")

return CGSize(width:collectionView.bounds.width , height: height + 10)
}