我根据用户提供的数据动态设置UITableView单元格中的内容。例如,如果用户未提供图像,则UIImageView会消失以使单元格显得更短。我的问题是,我认为动态处理我的细胞内容会导致重复使用的细胞混乱。
我确定问题是因为我要从superview中删除图像视图,但是当我重新加载表视图时它不应该重置吗?或者我必须以某种方式将其添加回superview?在我去之前,不必要地以编程方式添加一堆约束,处理这个问题的正确方法是什么?这是我的单元格的相关代码。
func configureItemCell(postTitle: String, postTime: String, postDescription: String, postImageURL: String) {
titleLabel.text = postTitle
timePostedLabel.text = "\(postTime) by"
if postImageURL != "" {
postImageView.sd_setImage(with: URL(string: postImageURL), placeholderImage: UIImage(named: "placeholder"))
} else {
// Remove image view since none was specified
postImageView.removeFromSuperview()
// Attach constraint for description since image is now gone
let descriptionBottomConstraint = NSLayoutConstraint(item: descriptionLabel, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.bottomMargin, multiplier: 1, constant: -12)
NSLayoutConstraint.activate([descriptionBottomConstraint])
}
if postDescription == "" {
// Shrink distance to 0 since description not showing
descriptionTopConstraint.constant = 0
}
}
答案 0 :(得分:0)
简单的解决方案是使用两种不同的细胞类型。一个是常规的,另一个是特殊的。
override func tableView(_ tableView: UITableView, cellForRowAt
indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.section]
switch item.type {
case .normal:
if let cell = tableView.dequeueReusableCell(withIdentifier: "Normal", for: indexPath) as? NormalCell {
cell.item = item
return cell
}
case .special:
if let cell = tableView.dequeueReusableCell(withIdentifier: "Special", for: indexPath) as? AboutCell {
cell.item = item
return cell
}