iOS将图像加载到表格视图单元格中

时间:2018-01-23 15:52:05

标签: ios uitableview swift4 xcode9

更新

现在图像会在加载时显示,但仍然存在无法解决的问题。 即使三个视图处于垂直堆栈中,图像也与单元格的内容重叠(第一个是图像,接下来的两个是标签视图)。 我想知道视图如何与stackview中的其他视图重叠

imageview overlaps label views

现在我的talbe视图委托方法如下所示:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell: BaseTableViewCell!
    if let contents = contents {
        let content = contents[indexPath.row]
        if let imageUrl = content.imageUrl, let url = URL(string: imageUrl) {
            cell = tableView.dequeueReusableCell(withIdentifier: "ImageContentRow", for: indexPath) as! ContentWithImageTableViewCell
            Alamofire.request(url).responseImage(completionHandler: { (response) in
                if let image = response.result.value {
                    cell.imageView?.image = image
                    cell.setNeedsLayout()
                }
            })
        }else{
            cell = tableView.dequeueReusableCell(withIdentifier: "ContentRow", for: indexPath) as! ContentTableViewCell
        }
        cell.contentTitleVeiw.text = content.title
        cell.contentLeadView.text = content.lead
    }
    return cell!
}

我对iOS很新。我已经有教程和观看视频课程,现在我想实现我的第一个应用程序。 我尝试阅读一个feed并显示内容的标题,主角和图像(如果有的话)。 我定义了一个带有UIMageVeiw和两个UILable的单元格,最后我将它们嵌入到一个垂直的StackView中(我将分布设置为Fill)。 一切运作良好,但图像不会自动显示,只需单击单元格或滚动TableVeiw。 即使我将图像视图设置为Aspect Fit(并将其嵌入到垂直堆栈视图的顶部),当图像显示时,它保持原始大小并重叠单元格内容。 我试图找出我做错了两天,但我无法解决它。

我尝试显示如下数据:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell: BaseTableViewCell!
    if let contents = contents {
        let content = contents[indexPath.row]
        if let imageUrl = content.imageUrl, let url = URL(string: imageUrl) {
            cell = tableView.dequeueReusableCell(withIdentifier: "ImageContentRow", for: indexPath) as! ContentWithImageTableViewCell
            cell.imageView?.af_setImage(withURL: url)
        }else{
            cell = tableView.dequeueReusableCell(withIdentifier: "ContentRow", for: indexPath) as! ContentTableViewCell
        }
        cell.contentTitleVeiw.text = content.title
        cell.contentLeadView.text = content.lead
    }
    return cell!
}

图像视图单元的视图层次结构如下所示:

ImageContentCell

我启动应用并显示数据后,我的列表如下所示:

After data loaded

单击应显示图像的单元格或向外滚动并返回结果后,结果如下:

After click or scroll

至少这是我的列表视图控制器,带有两个原型单元 (一个用于带图像的内容,一个用于没有图像的内容)

table controller

1 个答案:

答案 0 :(得分:1)

您需要通知tableView图片已加载并且必须重绘单元格。

尝试更改

cell.imageView?.af_setImage(withURL: url)

cell.imageView?.af_setImage(withURL: url, completion: { (_) in
    self.tableView.beginUpdates()
    self.tableView.setNeedsDisplay()
    self.tableView.endUpdates()
})

看看我的回答here - 最后您可能需要在imageView上明确设置身高。