我有一个UICollectionView
每行有3个单元格。我需要把topLeft
和bottomLeft
cornerRadius
设置在左边,把topRight
和bottomRight
设置在右边。中间一个没有cornerRadius
。
扩展法设置转弯半径
func setRadius(corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
}
我用这段代码来找出哪个单元格需要角半径。
let index = indexPath.row
if index == 0 || index % 3 == 0 {
cell.setRadius(corners: [.topLeft, .bottomLeft], radius: TPSetting.cornerRadius)
}
else if ( index - 2) % 3 == 0 {
cell.setRadius(corners: [.topRight, .bottomRight], radius: TPSetting.cornerRadius)
} else {
cell.layer.cornerRadius = 0
}
这是第一次按预期工作。但是,当你打电话给
collectionView.reloadData()
时,它会搞砸,中间的那个也会得到topRight
和bottomRight cornerRadius
。如何解决这个问题?
最佳答案
滚动/重新加载数据时,单元格将被重用而不被释放。这是预期的行为。
为了“重置”引入的拐角半径更改,您可以:
亚类细胞。
重写子类中的prepareForReuse
方法以撤消在setRadius
方法中引入的更改。Docs
别忘了在重写方法内部调用super.prepareForReuse
。
将代码放入方法中:
self.layer.mask = nil
self.layer.cornerRadius = 0
关于ios - 每行布局中的3个单元格中将cornerRadius添加到1st和3td UICollectionViewCell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56410751/