Некоторые пользовательские UITableViewCells не рендерится - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть пользовательская ячейка UITableViewCell, иногда, когда загружается табличное представление, я получаю недостающие ячейки (ячейки, где представление содержимого вообще не отображается. Я получаю это поведение довольно последовательно, когда использую reloadRowsAtIndexPath (когда пользовательский объект - ячейкаиспользуется обновляется, например). Если я вызываю reloadData для таблицы, я обычно не получаю такого поведения.

Вот как это выглядит при отладке представления: Content View is missing

Вот ячейка под ней (которая была отработана): ContentView rendered

Моя инициализация ячейки в cellForRowAtIndexPath - обычный шаблон:

Правка - вся ячейкаForRowAtIndexPath:

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

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

У меня естьтакже гарантировал, что я нахожусь в главной очереди, поместив мой reloadRowsAtIndexPath в закрытие основной очереди, но это не имеет значения.

Что я пропустилING

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Проблема заключалась в том, что у меня было неоднозначное ограничение в представлении содержимого ячейки.Это стало известно только тогда, когда я добавил setNeedsLayout в методе делегата для перезагрузки строки.Как только я обнаружил, что это было легко найти с помощью точки останова и отладки представления.Когда я удалил ограничение расстояния, которое вызывало проблему, все проблемы рендеринга исчезли.Спасибо @DionizB за то, что поставили меня на правильный путь.

0 голосов
/ 12 декабря 2018

Иногда возникает проблема с представлением таблицы при первой загрузке.Поэтому я бы предложил перезагрузить данные tableView дважды.Вы можете использовать это расширение:

extension UITableView {
    func reloadDataWithAutoSizingCellWorkAround() {
        self.reloadData()
        self.setNeedsLayout()
        self.layoutIfNeeded()
        self.reloadData()
    }
}

, которое встречается в этом выпуске https://github.com/smileyborg/TableViewCellWithAutoLayoutiOS8/issues/10

Или вы можете позвонить напрямую:

self.reloadData()
self.setNeedsLayout()
self.layoutIfNeeded()
self.reloadData()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...