如何根据数据更改 UICollectionView 单元格宽度
How to change UICollectionView Cell width base on data
我有一个 UICollectionView,其单元格仅包含一个标签。我已经实现它工作正常,但一些字符串值设置为单元格内的标签被切掉了。检查下图。
Select 单元格应显示为 "Day Before Yesterday"。如果有办法根据数据长度调整单元格宽度,我可以解决这个问题。可能吗 ?
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 没有建议这种方法。
要计算每个单元格的大小,您需要计算出文本的宽度,还要考虑给定的填充。使用它来获取单元格的宽度,以及 return 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 选项。
对于您获得的宽度,添加适当的填充值。
请使用自调整单元格。请按照以下步骤获取更多信息
只有流式布局支持自动调整单元格大小,因此请确保这就是您使用的内容。
按照以下步骤操作:
在 UICollectionViewFlowLayout 上设置 estimatedItemSize
添加对单元格子类(自动版式)调整大小的支持。 More info here.
检查此 github 回购:SelfSizingCollectionViewCell
我有一个 UICollectionView,其单元格仅包含一个标签。我已经实现它工作正常,但一些字符串值设置为单元格内的标签被切掉了。检查下图。
Select 单元格应显示为 "Day Before Yesterday"。如果有办法根据数据长度调整单元格宽度,我可以解决这个问题。可能吗 ?
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 没有建议这种方法。
要计算每个单元格的大小,您需要计算出文本的宽度,还要考虑给定的填充。使用它来获取单元格的宽度,以及 return 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 选项。 对于您获得的宽度,添加适当的填充值。
请使用自调整单元格。请按照以下步骤获取更多信息
只有流式布局支持自动调整单元格大小,因此请确保这就是您使用的内容。
按照以下步骤操作:
在 UICollectionViewFlowLayout 上设置 estimatedItemSize
添加对单元格子类(自动版式)调整大小的支持。 More info here.
检查此 github 回购:SelfSizingCollectionViewCell