В моем проекте есть UITableView, отображающий пользовательские ячейки фиксированной высоты.
Когда я перехожу к ViewController, я хочу запустить анимацию в tableViewCells. когда я прокручиваю вниз, а затем возвращаюсь к первой ячейке, я не хочу снова запускать анимацию. Для этого я использую tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
. Затем я использую массив, чтобы запомнить, какие ячейки уже были на экране.
Моя функция выглядит следующим образом:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let myCell = cell as! myTableViewCell
if !alreadyShown.contains(indexPath) {
alreadyShown.append(indexPath)
myCell.animate()
} else {
myCell.dontAnimate()
}
}
Однако, похоже, это игнорирует высоту моей ячейки. Поэтому он работает для каждого indexPath, который был бы отображен для стандартных ячеек (например, 17 раз на iPhone X), даже если 14 из этих 17 ячеек не видны. Когда я прокручиваю позже, анимация уже завершена для этих 14 следующих ячеек.
Есть ли способ сообщить функции ячейки willDisplay высоту ячейки, чтобы она знала, какие ячейки действительно будут отображаться? Или есть какой-то другой способ сохранить счет, какие ячейки уже были отображены?