Ios 具有不同UITableViewCells和动态内容的UITableView
在我们的应用程序中,我们经常使用类型为数据源的显示项目列表,使用Ios 具有不同UITableViewCells和动态内容的UITableView,ios,swift,uitableview,Ios,Swift,Uitableview,在我们的应用程序中,我们经常使用类型为数据源的显示项目列表,使用UITableViews在可滚动列表中显示不同的自定义uitableviewcell。在TableView的cellforRowAt函数中,我们根据显示项目的类型决定使用哪个自定义UITableViewCell 这种方法现在在从internet加载和显示图像的UITableViewCell中造成了问题,因为视图还不知道图像的大小 这是我尝试构建的自定义视图: 但是,我试图从自定义视图中的图像开始。由于TableView行不知道图像将
UITableViews
在可滚动列表中显示不同的自定义uitableviewcell
。在TableView
的cellforRowAt
函数中,我们根据显示项目的类型决定使用哪个自定义UITableViewCell
这种方法现在在从internet加载和显示图像的UITableViewCell
中造成了问题,因为视图还不知道图像的大小
这是我尝试构建的自定义视图:
但是,我试图从自定义视图中的图像开始。由于TableView
行不知道图像将有多大,因此视图出现时不显示图像。只有在向下和向上滚动到图像应该位于的位置后,单元格才会按照我的要求调整大小。我将图像的顶部、前导和尾随约束设置为0,以便图像完全填充单元格
加载图像并在这样的单元格中显示图像的最佳实践是什么?单元格的大小取决于实际图像的大小
在viewDidLoad
I设置中
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 80
cellForRowAtIndexPath
let cell: CustomTableViewCell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell
cell.imageView.contentMode = .scaleAspectFit
tableView.beginUpdates()
cell.imageView.kf.setImage(with: URL(string: item.getImageUrl()), placeholder: nil, options: nil, progressBlock: nil) { (image, error, cacheType, url) in
tableView.endUpdates()
}
cell.isUserInteractionEnalbed = false
cell.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: .greatestFiniteMagnitude)
cell.accessoryType = .none
return cell
配置tableview或加载视图时: 写下这些:
yourTableView.estimatedRowHeight = 70.0 // this can be any height you want to set when table loads first time.
yourTableView.rowHeight = UITableViewAutomaticDimension
或者,如果您正在从storyboard/xib进行配置,则可以从storyboard/xib中设置这些设置。请参见此处的uitableview设置。一种解决方案可以在图像下载完成后重新加载该特定行(如果可见)
tableView.reloadRows(at: [indexPathForRow], with: .none)
正如您所说的,在向下和向上滚动增益后,图像会得到完美的显示,我相信这个解决方案应该会起作用。终于找到了问题所在。我显示的数据是由演示者提供的,而不是最初的演示者提供的。这就是为什么我在获得数据后调用
tableView.reloadData()
。问题是我没有在主线程中显式调用该方法
DispatchQueue.main.async {
tableView.reloadData()
}
您正在从网络api加载图像吗?我使用库将图像从internet加载到UIImageViews中。我可以知道你从哪里得到图像URL吗?请确保你已经为行高设置了自动尺寸,并且你有从单元格顶部到底部的约束。您还必须从
estimatedHeightForRow
返回一些值,最后,在加载图像时,调用beginUpdates
,然后调用endUpdates
,以获取表视图以重新显示可见图像cells@MuhammedAzharudheen:无需计算高度和宽度,可以很容易地通过自调整大小的细胞来完成。没有给我带来任何变化