我有一个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时(我将present模态地转到另一个视图控制器,并且在关闭该viewController并返回到该viewController之后,某些单元格的边框被弄乱了,见下文:
图片1
图片2
图片3
。
我测试了我能想到的一切,重新加载tableview,删除行并再次插入,但是没有任何效果。有人可以帮助我吗?
答案 0 :(得分:1)
表视图重用单元格。每次重复使用单元格且reindex
为true时,您将添加另一个CAShapeLayer
。即使在以后将单元格重新用于非虚线图标时,这些形状层仍然保留。
您应该制作一个dashed
子类来处理形状层。 UIView
应该是该子类的实例,并具有引用形状层的实例变量。
答案 1 :(得分:0)
private func setIconContainerViewBorder(dashed: Bool, _color: CGColor) {
if let _sublayers = self.iconContainerView.layer.sublayers {
for _sublayer in _sublayers {
if let _caShapeLayer = _sublayer as? CAShapeLayer {
_caShapeLayer.removeFromSuperlayer()
}
}
}
self.iconContainerView.layer.borderColor = UIColor.clear.cgColor
self.iconContainerView.layer.borderWidth = 0
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
}
}