CollectionViewLayout 补充视图高度等于内容
CollectionViewLayout Supplementary View height equal to content
我有一个 UICollectionViewLayout 子类,其中包含一个包含多行 UILabel 的补充视图。问题是不是所有的文本在某个点都是可见的,我怎样才能让补充视图的高度等于它的内容?
您可以使用以下函数找到文本的高度:-
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 height:label.frame.height
}
然后将此 UICollectionViewDelegateFlowLayout 方法添加到您的控制器中,并为您的 header
添加 return 大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize{
// Pass parameter into this function according to your requirement
let height = labelHeight(width: collectionView.bounds.width , font:UIFont , text:"")
return CGSize(width:collectionView.bounds.width , height: height + 10)
}
我有一个 UICollectionViewLayout 子类,其中包含一个包含多行 UILabel 的补充视图。问题是不是所有的文本在某个点都是可见的,我怎样才能让补充视图的高度等于它的内容?
您可以使用以下函数找到文本的高度:-
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 height:label.frame.height
}
然后将此 UICollectionViewDelegateFlowLayout 方法添加到您的控制器中,并为您的 header
添加 return 大小func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize{
// Pass parameter into this function according to your requirement
let height = labelHeight(width: collectionView.bounds.width , font:UIFont , text:"")
return CGSize(width:collectionView.bounds.width , height: height + 10)
}