У меня есть представление коллекции, которое я повторно использую для загрузки 2 совершенно разных наборов данных в зависимости от выбора пользователя. Для каждого набора данных представление коллекции имеет разные настройки границ.
При начальной загрузке ячейка представления коллекции отображает правильные границы, затем при последовательных загрузках предыдущие ячейки сохраняются в ячейке.
Я установил границы внутри этого метода:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { }
Я хочу, чтобы при каждой загрузке представления коллекции границы ячейки также сбрасывались.
Редактировать: вот как я строю свою ячейку и устанавливаю границы:
cell.label.text = MATRIX[indexPath.section][indexPath.row]
cell.layer.backgroundColor = UIColor.red.cgColor
if indexPath.section == 0 && indexPath.row == 0 {
cell.addBorders(left: YES, right: NO, top: YES, bottom: NO)
}
if indexPath.section == 0 && indexPath.row == 1 {
cell.addBorders(left: YES, right: YES, top: YES, bottom: YES)
}
if indexPath.section == 1 && indexPath.row == 0 {
cell.addBorders(left: YES, right: NO, top: NO, bottom: YES)
}
if indexPath.section == 1 && indexPath.row > 0 {
cell.addBorders(left: YES, right: NO, top: NO, bottom: YES)
}
if indexPath.section > 1 && indexPath.row == 1 {
cell.addBorders(left: YES, right: NO, top: NO, bottom: NO)
}
if indexPath.row == MATRIX[0].count {
cell.addBorders(left: NO, right: YES, top: NO, bottom: NO)
}
if indexPath.section == MATRIX.count {
cell.addBorders(left: NO, right: NO, top: NO, bottom: YES)
}
Метод расширения UICollectionViewCell для добавления границ:
func addBorders(left: Bool, right: Bool, top: Bool, bottom: Bool) {
if left {
self.layer.addBorder(edge: .left, thickness: 1)
}
if right {
self.layer.addBorder(edge: .right, thickness: 1)
}
if top {
self.layer.addBorder(edge: .top, thickness: 1)
}
if bottom {
self.layer.addBorder(edge: .bottom, thickness: 1)
}
}
Метод расширения CALayer:
func addBorder(edge: UIRectEdge, thickness: CGFloat) {
let border = CALayer()
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: thickness)
break
case UIRectEdge.bottom:
border.frame = CGRect(x:0, y:self.frame.height - thickness, width:self.frame.width, height:thickness)
break
case UIRectEdge.left:
border.frame = CGRect(x:0, y:0, width: thickness, height: self.frame.height)
break
case UIRectEdge.right:
border.frame = CGRect(x:self.frame.width - thickness, y: 0, width: thickness, height:self.frame.height)
break
default:
break
}
border.backgroundColor = UIColor.darkGray.cgColor
self.addSublayer(border)
}