我正在尝试重新创建Facebook设置页面
这是Facebook设置页面的外观:
https://gfycat.com/SizzlingSorrowfulGrayfox
我已经开始了一个新项目,该项目仅使用1个表格视图,具有样式分组,节和标题。
我想四舍五入表格视图的每个部分。我必须四舍五入标题的左上角和右上角(该部分的顶部),最后一个单元格的左下角和右下角(该部分的底部)。
我已经使用HeaderTableViewCell
中的以下代码完成了顶部:
let rectShape = CAShapeLayer()
rectShape.bounds = self.frame
rectShape.position = self.center
rectShape.path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: [.topLeft , .topRight], cornerRadii: CGSize(width: 10, height: 10)).cgPath
self.layer.mask = rectShape
但是,当我对最后一个单元格执行同样的操作时,会发生奇怪的事情。
https://gfycat.com/UnselfishCommonFlee
第一次加载页面时,角部已正确倒圆,但是当我上下滚动时,倒数第二个单元格已变圆。
这是我的代码,用于舍入cellForRowAt
中的最后一个单元格:
if indexPath.row + 1 == childArray?.count { //last cell, set corner radius
print("is last cell")
let rectShape = CAShapeLayer()
rectShape.bounds = rowDataCell.frame
rectShape.position = rowDataCell.center
rectShape.path = UIBezierPath(roundedRect: rowDataCell.bounds, byRoundingCorners: [.bottomLeft , .bottomRight], cornerRadii: CGSize(width: 10, height: 10)).cgPath
rowDataCell.layer.mask = rectShape
}else{
rowDataCell.layer.cornerRadius = 0
}
有帮助吗?
答案 0 :(得分:3)
单元被重用。您有条件设置的所有属性都必须重置。
您为最后一个单元格设置了图层的mask
,但是当该单元格不是最后一个单元格时,您没有清除该掩码。
if indexPath.row + 1 == childArray?.count { //last cell, set corner radius
print("is last cell")
let rectShape = CAShapeLayer()
rectShape.bounds = rowDataCell.frame
rectShape.position = rowDataCell.center
rectShape.path = UIBezierPath(roundedRect: rowDataCell.bounds, byRoundingCorners: [.bottomLeft , .bottomRight], cornerRadii: CGSize(width: 10, height: 10)).cgPath
rowDataCell.layer.mask = rectShape
}else{
rowDataCell.layer.mask = nil
}
答案 1 :(得分:0)
这是解决此问题的简便方法,只需在表格视图单元格的末尾添加此行代码 rowDataCell.layer.mask = nil