UIStackView в ячейке UITableView вызывает рывки при прокрутке - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть ячейка UITableView с представлением стека внутри.При нажатии на ячейку источник данных изменяется, и представление таблицы перезагружается.Представление стека теперь будет иметь больше представлений внутри, и ячейка будет больше.Однако, иногда, когда я прокручиваю таблицу, происходит резкое поведение.Это почти как размер ячейки был вычислен неправильно или что-то еще (хотя выглядит хорошо)После того, как табличное представление пошатнулось, все в порядке и не будет делать это снова, пока я не коснусь ячейки, и это не добавит больше стековых представлений.

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

Я установил приблизительную высоту строки как можно ближе к расчетной высоте tableView.estimatedRowHeight = 270.Не влияет.Я также пытался реализовать делегата, и это не имеет значения.Я пробовал много комбинаций или размеров, и результат тот же.Есть идеи о том, что я здесь делаю не так?Представления стека в ячейках просто сосут?

1 Ответ

0 голосов
/ 13 сентября 2018

Я думаю, что вы на правильном пути в отношении предполагаемой высоты, вызывающей проблемы.Я сталкиваюсь с этой проблемой рывков и почти в каждом tableView с переменным размером элемента.Обычно это «кэширует» высоту ячеек и возвращает их в делегате, что-то вроде:

class MyViewController: UIViewController {

    fileprivate var cachedCellHeights = [IndexPath: CGFloat]()

    //your code here

}

extension MyViewController: UITableViewDelegate {

    public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        cachedCellHeights[indexPath] = cell.frame.height
    }

    public func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        if let height = cachedCellHeights[indexPath] {
            return height
        }
        return 270
    }

}

Это должно работать, пока вы настраиваете свою ячейку (то есть добавляете новые представления в представление стека) в tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath).

То же самое относится к заголовкам разделов.

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