我有一个带有自动布局的动态单元格,该单元格具有图像和动态标签。目前,我尝试绘制气泡图像,但是我需要知道给定标签文本的大小。我必须说,我总是收到错误的尺寸,并且在滚动表格视图时,气泡图像会被放置在核心位置,但会广告另一个气泡。
这是我的代码:
func imageCellAtIndexPath(indexPath:NSIndexPath) -> SenderTableViewCell{
let cell = self.tableView.dequeueReusableCellWithIdentifier("SenderIdentifier") as! SenderTableViewCell
cell.senderMessageLAbel.text = "fadfasdfasdfasdfasdfasdadfasdfsb"
cell.senderMessageLAbel.sizeToFit()
cell.senderNameLabel.text = "Stefan"
let padding: CGFloat = 10.0
// 4. Calculation of new width and height of the chat bubble view
var viewHeight: CGFloat = 0.0
var viewWidth: CGFloat = 0.0
viewHeight = cell.senderMessageLAbel.frame.size.height + padding
viewWidth = cell.senderMessageLAbel.frame.size.width + padding/2
if viewHeight > viewWidth {
viewHeight = cell.senderMessageLAbel.frame.size.width + padding/2
viewWidth = cell.senderMessageLAbel.frame.size.height + padding
}
let bubbleImageFileName = "bubbleMine"
let imageViewBG : UIImageView = UIImageView(frame: CGRectMake(cell.senderMessageLAbel.frame.origin.x - 5, cell.senderMessageLAbel.frame.origin.y - 10,viewWidth,viewHeight ))
imageViewBG.image = UIImage(named: bubbleImageFileName)?.resizableImageWithCapInsets(UIEdgeInsetsMake(14, 22,17 , 20))
cell.insertSubview(imageViewBG, atIndex: 0)
imageViewBG.center = cell.senderMessageLAbel.center
return cell
}
我不知道我的代码出了什么问题。有什么建议么?
最佳答案
我假设您的函数在UICollectionView DataSource的cellForItemAtIndexPath
函数中被调用。每当需要绘制视图中的收集视图单元时,都会多次调用该函数。因此,每次发生这种情况时,您都将imageViewBG
插入到单元格中,因此会重复。
一种快速的解决方案是将一个特定的标签添加到imageViewBG
如下,并在每次重新添加之前将其删除。
cell.viewWithTag(99)?.removeFromSuperview()
let imageViewBG = //Configure
imageViewBG.tag = 99
cell.insertSubview(imageViewBG, atIndex: 0)
尽管这将有助于解决重复项问题,但我强烈建议您将imageView添加到情节提要上的自定义单元中,并配置应在
cellForItemAtIndexPath
中显示的图像。