ios - 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,删除行并再次插入,但没有任何效果。任何人都可以帮助我吗?
解决方案
表格视图重用单元格。CAShapeLayer
每次重复使用单元格并且dashed
为真时,您都会添加另一个。即使稍后将单元格重新用于非虚线图标,这些形状图层也会保留。
您应该创建一个UIView
子类来处理形状层。iconContainerView
应该是该子类的一个实例,并且有一个引用形状层的实例变量。
推荐阅读
- javascript - 如何将单击动态添加的元素与 setTimeOut 绑定
- java - 玩数字长度
- hybris - 在 Hybris 中通过 AJAX 填充的附加字段
- java - “模块尚未部署,详情见服务器日志”
- android - 带有左图标的Android自定义EditText可以在edittext不为空时更改焦点上的颜色并保持图标颜色保持焦点?
- css - 如何在各种屏幕中对页面末尾有一个固定的边距?
- python - “AttributeError:模块 'logging' 没有属性 'basicConfig'”
- c# - 使用 TCP/IP 捕获 Mettler Toledo IND560 的重量
- scala - 如果数据框列尚不存在,是否有一种计算成本较低的方法来添加数据框列?
- java - Maven 依赖与父 Pom 无法正常工作