我有一个分组的UITableView,我在第二部分中显示了一些汽车数据。我使用SDWebImage从Web服务器加载图像。在其回调中,我调整图片大小并更新我的图像视图。
但是,只要我更新图像视图,UITableView分隔符就会被切断。 为了便于说明,我给出了各自的元素背景颜色 当图像尚未加载时,它看起来像这样:
更新图像时,它看起来像这样
请注意,即使没有子视图(UIImageView
)隐藏它,行分隔符也会以某种方式在UITableView单元格之间被切断。
根据UITableView
部分的行高度不同,所以我覆盖了heightForRowAtIndexPath
UITableView委托
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.section == 0 {
return GFFloat(44)
}
else {
return CGFloat(220)
}
}
有人可以告诉我为什么分隔符会消失以及我如何解决这个问题?我已经阅读了关于在更新图像时重新加载下一个UITableViewCell
的内容,但由于我显示了很多汽车,因此当我尝试使用时,我的应用程序崩溃了。
答案 0 :(得分:1)
只需添加以下方法即可解决分隔符问题。
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if cell.respondsToSelector("setSeparatorInset:") {
cell.separatorInset = UIEdgeInsetsZero
}
if cell.respondsToSelector("setPreservesSuperviewLayoutMargins:") {
cell.preservesSuperviewLayoutMargins = false
}
if cell.respondsToSelector("setLayoutMargins:") {
cell.layoutMargins = UIEdgeInsetsZero
}
}
答案 1 :(得分:0)
Swift 5解决方案
将此添加到您的控制器:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) {
cell.separatorInset = UIEdgeInsets.zero
}
if cell.responds(to: #selector(setter: UIView.preservesSuperviewLayoutMargins)) {
cell.preservesSuperviewLayoutMargins = false
}
if cell.responds(to: #selector(setter: UIView.layoutMargins)) {
cell.layoutMargins = UIEdgeInsets.zero
}
}