我有一个带有自动布局的动态单元格,该单元格具有图像和动态标签。目前,我尝试绘制气泡图像,但是我需要知道给定标签文本的大小。我必须说,我总是收到错误的尺寸,并且在滚动表格视图时,气泡图像会被放置在核心位置,但会广告另一个气泡。

这是我的代码:

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中显示的图像。

09-11 18:23