Почему в списке нет представления разделителя UITableViewCell?

Я хочу удалить некоторые UITableViewCell separators (не все).

Я вижу их в пользовательском интерфейсе, но не понимаю, почему они не отображаются в списке, когда я распечатываю иерархию подвидов?

for view in cell.subviews {
    DDLogDebug(String(describing: type(of: view)))
}

введите здесь описание изображения

Кажется, это происходит при первом просмотре. Если я прокручу ячейки UITableView далеко за пределы поля зрения, а затем вернусь обратно, разделитель UITableViewCell волшебным образом появится в распечатке журнала подпредставления. Что тут происходит?

Примечание. Я тестировал только на симуляторе, так как в настоящее время у меня нет iPhone X.


person Sebastian Dwornik    schedule 08.04.2018    source источник
comment
Я люблю отрицательные голоса без объяснения причин. ????   -  person Sebastian Dwornik    schedule 14.05.2018


Ответы (3)


Работа с вне ячейки UITableViewCell не кажется столь надежной, как простое подклассирование ячейки и получение управления изнутри.

Отсюда мое решение ниже:

class myCell: UITableViewCell {

    var withSeparator: Bool = true

    func layoutSubviews() {
        super.layoutSubviews()

        if !withSeparator {
            self.removeBottomSeparator()
        }

    }
...



extension UITableViewCell {
    func removeBottomSeparator() {
        // Remove it if it's found.
        for view in self.subviews where String(describing: type(of: view)).hasSuffix("SeparatorView") {
            view.removeFromSuperview()
        }

    }
}

Использование этого метода позволяет мне каждый раз находить SeparatorView и удалять его. ????

person Sebastian Dwornik    schedule 08.04.2018

У меня была такая же проблема с разделителями UITableView на iPhone X. Я смог решить ее, изменив фон ячейки:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell: UITableViewCell = ...
   ...

   **cell.backgroundColor = .clear** // <= MAGIC LINE
   return cell
}
person Auguimar Júnior    schedule 13.04.2018

Вы можете удалить разделитель с помощью раскадровки, а также программно.

Раскадровка

просто нажмите на table view и перейдите к attribute inspector из них выберите separator и измените его с default на none .

введите здесь описание изображения

Код

используйте приведенный ниже код в viewDidLoad

customtableview.separatorStyle = .none

РЕДАКТИРОВАТЬ СКРЫТЬ ИЛИ УДАЛИТЬ РАЗДЕЛЕНИЕ ОТ ОДНОЙ КЛЕТКИ

Кто-то уже задал прокомментированный вопрос в этом сообществе. Итак, вот решение для обработки разделения отдельных клеток.

person Rumy    schedule 08.04.2018
comment
За исключением того, что я хочу удалить определенные разделители UITableViewCell; не все они. - person Sebastian Dwornik; 08.04.2018
comment
@SebastianDwornik Я отредактировал свой ответ, убрав определенное разделение UITableViewCell. Надеюсь, это поможет вам решить вашу проблему. Дайте мне знать, если у вас возникнут дополнительные вопросы. - person Rumy; 09.04.2018
comment
Я читал это решение раньше, проблема в том, что смещение separatorInset далеко от экрана также, по-видимому, меняет поля на iPhone X / 8plus. Выравнивание текстовой метки слева или справа. :/ - person Sebastian Dwornik; 09.04.2018