我有一个UICollectionView,其中一个单元格只包含一个标签。我已经实现了它正常工作,但是一些字符串值设置为在单元格内部标记切出。检查下图。
选择单元格应显示为"昨天前一天"。如果有一种方法可以根据数据长度调整单元格宽度,我可以解决这个问题。可能吗 ?
PS:以下方法提出了一些类似的问题。所以我试过但没有运气。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if(collectionView == dateRangeCollectionView){
return (dateRanges[indexPath.item] as NSString).size(attributes: nil)
}else{
return (OrderStatus[indexPath.item] as NSString).size(attributes: nil)
}
}
我不认为这种方法甚至存在于swift 4中。当我开始键入" sizeForItemAt" Xcode没有提出这种方法。
答案 0 :(得分:0)
要计算每个单元格的大小,您需要确定文本的宽度,同时考虑给定的填充。使用它来获取单元格的宽度,并返回sizeForItem委托中的值。
func labelSizeWithString(text: String,fontSize: CGFloat, maxWidth : CGFloat) -> CGRect{
let font = UIFont.systemFontOfSize(fontSize)
let label = UILabel(frame: CGRectMake(0, 0, maxWidth, CGFloat.max))
label.numberOfLines = 0
label.font = font
label.text = text
label.sizeToFit()
return label.frame
}
如果希望文本以一行或两行显示,请使用numberOfLines选项。 对于您获得的宽度,请添加适当的填充值。
答案 1 :(得分:0)
自定义单元格仅支持流程布局,因此请确保您正在使用的内容。
请按照以下步骤操作:
在UICollectionViewFlowLayout上设置estimatedItemSize
添加对细胞亚类(Autolayout)上的大小调整的支持。 More info here
结帐此github回购:SelfSizingCollectionViewCell