在UICollectionView
内,我在UILabel
内有一个HeaderView
。numberOfLines
设置为零以根据标签的文本更改标签的height
。我希望标题的height
取决于标签的frame
。
附言。 UICollectionView中的HeaderView
并不像common view
甚至UITableViewCell
那么简单。此功能与UICollectionReusableView
不同,与它们一起使用非常简单。
使用此功能查找标签的高度:-
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)
}