Проблемы при добавлении границ в правильный UITableViewCell - PullRequest
1 голос
/ 13 июля 2020

При попытке установить границы вокруг моих UITableViewCells у меня возникает проблема, из-за которой всякий раз, когда TableView прокручивается вниз, добавляется граница там, где я не хочу, чтобы она была! Мне нужно индивидуально установить эти границы для первой и последней ячеек, потому что у самого TableView есть заголовок, который я не хочу включать в границу. У меня уже есть нижний колонтитул, поэтому я тоже не могу использовать эту опцию.

Вот как выглядит мой код:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
    
    cell.viewMain.addBorders(edges: [.left, .right], color: UIColor.black)
    
    if indexPath.row == 0 {
        cell.viewMain.addBorders(edges: [.top], color: UIColor.black)
    } else if indexPath.row == ((self.dataArray.count ?? 1) - 1){
        cell.viewMain.addBorders(edges: [.bottom], color: UIColor.black)
    }

А вот как выглядит TableView при прокрутке вниз и назад: Проблемы с TableView

Мне пришлось отредактировать данные для обеспечения конфиденциальности, но видите проблему? Границы должны быть только сверху и снизу, и когда представление загружено изначально, оно выглядит правильно. Эта проблема возникает только тогда, когда пользователь прокручивает страницу вниз или экран недостаточно велик для просмотра всего TableView.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

В вашем CustomCell методе переопределения prepareForReuse, потому что эта проблема возникает, когда tableView повторно используют ячейки

class CustomCell:UITableViewCell {
    override func prepareForReuse() {
        //remove all borders here 
    }
}
1 голос
/ 13 июля 2020

Это потому, что ячейка переработана, вам нужно удалить всю границу перед добавлением границы

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell

    // remove all borders here        

    cell.viewMain.addBorders(edges: [.left, .right], color: UIColor.black)
    
    if indexPath.row == 0 {
        cell.viewMain.addBorders(edges: [.top], color: UIColor.black)
    } else if indexPath.row == ((self.dataArray.count ?? 1) - 1){
        cell.viewMain.addBorders(edges: [.bottom], color: UIColor.black)
    }
...