Как настроить stackview с содержимым Dynami c внутри UITableViewCell? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть UITableViewCell, который выглядит как CardView . Внутри ячейки я должен отобразить некоторый динамический c контент. Вот почему у меня есть stackview внутри моей ячейки, в которой будет мой динамический c контент. Но проблема в том, что метод cellForRowAt вызывается каждый раз при прокрутке и в стеке появляются дополнительные элементы.

Как мне решить эту проблему? Как я справился с проблемой самостоятельно?

Я нашел prepareForReuse метод UITableViewCell, который вызывается перед повторной настройкой по ячейке. В этом методе я очищаю свой stackView. И теперь у моего stackview не будет дополнительных просмотров. Но это плохо для производительности. Следующий способ, который я пробовал, - это держать в ячейке какой-то флаг, который сообщает мне, что stackview уже настроен. Но этот подход не помог (да, он не добавит дополнительных элементов, но содержимое внутри ячеек будет неправильно размещено), как проверка длины стека.

Вот мой псевдокод:

/// called in cellForRowAt
func configure(item: Item) {
    item.forEach {
        stackView.addArrangedSubview(ItemView(item))
    }
}

func prepareForReuse() {
    stackView.arrangedSubviews.forEach {
         $0.removeFromSuperView()
    }
}

1 Ответ

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

Если методы prepareForReuse и dequeuing приводят к превышению 0,0167 se c (60 кадров в секунду), тогда, возможно, в вашем пограничном случае будет лучше создать ячейку вместо ее удаления из очереди.

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