首页 > 解决方案 > tableViewCell 中的 UIBezierPath 冲突单元格之间的边界

问题描述

我有一个 ViewController,而那个 ViewController 有一个 tableView。这个 tableView 可以有四种状态的单元格,我需要其中两个在它们里面有一个虚线边框 UIView 并且我在下面使用了 UIBazierPath az:

private func setIconContainerViewBorder(dashed: Bool, _color: CGColor) {
    if dashed {
        let _border = CAShapeLayer()
        _border.lineDashPattern = [5, 4]
        _border.fillColor = nil
        _border.lineWidth = 2
        _border.strokeColor = _color
        _border.frame = self.iconContainerView.bounds
        _border.path = UIBezierPath(roundedRect: self.iconContainerView.bounds, cornerRadius: self.iconContainerView.frame.height / 2).cgPath
        self.iconContainerView.layer.addSublayer(_border)
    } else {
        self.iconContainerView.layer.cornerRadius = self.iconContainerView.frame.height / 2
        self.iconContainerView.layer.borderWidth = 2
        self.iconContainerView.layer.borderColor = _color
    }
}

问题是当我删除或添加单元格到 tableview 时(我以模态方式使用当前到另一个视图控制器,并且在关闭该 viewController 并返回到该 viewController 后,某些单元格边框被搞砸了,见下文:

图片1

截屏

图2

截屏

图3

截屏.

我测试了我能想到的所有东西,重新加载 tableview,删除行并再次插入,但没有任何效果。任何人都可以帮助我吗?

标签: iosswift

解决方案


表格视图重用单元格。CAShapeLayer每次重复使用单元格并且dashed为真时,您都会添加另一个。即使稍后将单元格重新用于非虚线图标,这些形状图层也会保留。

您应该创建一个UIView子类来处理形状层。iconContainerView应该是该子类的一个实例,并且有一个引用形状层的实例变量。


推荐阅读