在UITableViewCell中以编程方式设置UIImageView约束在滚动tableview时会搞乱

时间:2017-11-28 12:23:09

标签: ios swift uitableview uiimageview constraints

我以编程方式更改UIImageViewUITableViewCell高度。当有图片网址时,高度为100.0,当图片网址为零时,身高是0.0。 这是我在tableViewCell类中使用的代码:

func setConstraints(_height:CGFloat){
    self.commentImage.addConstraint(NSLayoutConstraint(item: self.commentImage,attribute: .height,relatedBy: .equal,toItem: self.commentImage,attribute: .width,multiplier: _height / 287.0,constant: 0))
    self.commentImage.updateConstraints()
    self.commentImage.layoutIfNeeded()
}

if let img = comment.image {
        let imgUrl = URL(string: img)
        self.commentImage.sd_setImage(with: imgUrl, placeholderImage: UIImage(named: "PlaceHolder Shop"))
        setConstraints(_height: 100.0)
    }else {
        self.commentImage.image = nil
        setConstraints(_height: 0.0)
    }

现在的问题是,当我滚动tableview时,一些没有图像url的行,100.0的高度为UIImageView,留下一个空白区域,如果我滚动tableView非常快,有时行中的图像消失了。

我该怎么做才能解决这个问题?我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

UITableViewCells被回收。您的setConstraints方法实际上并未设置约束;它添加一个新约束。要正确执行此操作,只需在“接口”构建器中设置约束即可。在尺寸检查器中找到高度约束,然后双击它以在文档轮廓中选择它。选项从约束拖动到tableViewCell以创建名为heightConstraint的IBOutlet。按如下方式更改您的代码:

func setConstraints(_height:CGFloat){
    heightConstraint.constant = height
    commentImage.setNeedsLayout()
}