更新
现在图像会在加载时显示,但仍然存在无法解决的问题。 即使三个视图处于垂直堆栈中,图像也与单元格的内容重叠(第一个是图像,接下来的两个是标签视图)。 我想知道视图如何与stackview中的其他视图重叠
现在我的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!
}
图像视图单元的视图层次结构如下所示:
我启动应用并显示数据后,我的列表如下所示:
单击应显示图像的单元格或向外滚动并返回结果后,结果如下:
至少这是我的列表视图控制器,带有两个原型单元 (一个用于带图像的内容,一个用于没有图像的内容)
答案 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
上明确设置身高。