更新单元格时,UITableView行分隔符被切断

时间:2015-12-01 11:08:16

标签: ios objective-c iphone swift uitableview

我有一个分组的UITableView,我在第二部分中显示了一些汽车数据。我使用SDWebImage从Web服务器加载图像。在其回调中,我调整图片大小并更新我的图像视图。

但是,只要我更新图像视图,UITableView分隔符就会被切断。 为了便于说明,我给出了各自的元素背景颜色 当图像尚未加载时,它看起来像这样:

row separator visible

更新图像时,它看起来像这样

enter image description here

请注意,即使没有子视图(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的内容,但由于我显示了很多汽车,因此当我尝试使用时,我的应用程序崩溃了。

2 个答案:

答案 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
    }
}