我有一个UICollectionView每行有3个单元格。我需要把topLeftbottomLeftcornerRadius设置在左边,把topRightbottomRight设置在右边。中间一个没有cornerRadius
ios - 每行布局中的3个单元格中将cornerRadius添加到1st和3td UICollectionViewCell-LMLPHP
扩展法设置转弯半径

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()时,它会搞砸,中间的那个也会得到topRightbottomRight 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/

10-13 05:02