所以我在UICollectionView中有一个单元格
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell: myCell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) as! myCell
// cell.descrption is an UILabel
cell.description.text = newText
return cell
}
和
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSizeMake(collectionView.bounds.width*0.95, collectionView.bounds.height/4)
}
我的问题是:
newText
是从网上获得的。所以它动态地改变了。在将单元格的文本设置为newText之后,我应该如何调整标签以使其具有合适的大小以适应" newText"我应该如何调整单元格的大小并将其显示在屏幕上?
我注意到sizeForItemAtIndexPath()
之前调用了cellForItemAtIndexPath()
。因此,我无法在sizeForItemAtIndexPath()
内计算nextText的大小。
答案 0 :(得分:2)
这是查看sizeForItemAtIndexPath()
中文字大小的好方法,
正如您已经知道在sizeForItemAtIndexPath()
之前调用cellForItemAtIndexPath()
,您可以拥有一个具有相同信息的虚拟单元格。例如,您可以参考我在UITableView
中使用的代码,并根据您的要求实施。
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var myLabel:UILabel!
var labelText = myTextArray[indexPath.row]
var constraint = CGSizeMake(662, MAXFLOAT);
var attributes = NSDictionary(dictionary: [UIFont(descriptor: UIFontDescriptorSizeAttribute, size: 12):NSFontAttributeName])
var textSize:CGRect = NSString(string: labelText).boundingRectWithSize(constraint, options: NSStringDrawingUsesLineFragmentOrigin, attributes: attributes, context: nil)
myLabel.text = labelText
return myLabel.frame.size.height
}
你可以做同样的事情来实现UICollectionView
中的大小,因为它们共享相同的继承。
所以没有问题。
即使您可以根据文本中的字符数返回自定义高度。喜欢
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var myLabel:UILabel!
var labelText = myTextArray[indexPath.row]
if count(labelText) > 0 && count(labelText) <30
return 40;
else if count(labelText)>31 && count(labelText)<60
return 70;
//and so on
}