如何根据标签大小调整 CollectionView 高度
Posted
技术标签:
【中文标题】如何根据标签大小调整 CollectionView 高度【英文标题】:how to adjust UICollectonView height depend on label size 【发布时间】:2017-05-23 11:08:01 【问题描述】:在我的代码中,我创建了具有页眉和页脚的 UICollectonView。
我的页脚高度应该是动态的,取决于文本大小。
文本可以从 1 行到 100 行。
这是我的代码。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize
return CGSize(width:collectionView.frame.size.width, height:50.0)
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
switch kind
case UICollectionElementKindSectionFooter:
let footer = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "SectionFooterCollectionReusableView", for: indexPath) as! SectionFooterCollectionReusableView
footer.lblDescription.text = composition?.desc
return footer
default: return UICollectionReusableView()
【问题讨论】:
设置label.numberOfLines = 0
,你熟悉NSLayoutConstraints
/NSLayoutAnchor
吗?
***.com/questions/25642493/… 和 ***.com/questions/39825290/… 的可能重复项
【参考方案1】:
您可以在字符串扩展中添加函数
extension String
func heightWithConstrainedWidth(_ width: CGFloat, font: UIFont) -> CGFloat
let constraintRect = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin,
attributes: [NSFontAttributeName: font], context: nil)
return boundingBox.height
然后在您的方法中计算文本高度
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize
if let string = composition?.desc
let height = string.heightWithConstrainedWidth(width, font: font)
//calculate needed height
return CGSize(width:collectionView.frame.size.width, height:neededHeight)
return CGSize(width:collectionView.frame.size.width, height:50.0)
【讨论】:
以上是关于如何根据标签大小调整 CollectionView 高度的主要内容,如果未能解决你的问题,请参考以下文章