Я изменяю атрибут numberOfLines
на метке, которая находится в пользовательском UITableViewCell при касании ячейки. Однако это не отражается в пользовательском интерфейсе до второго касания. Ячейка настроена как ячейка прототипа в табличном представлении, чтобы первоначально иметь 2 строки.
Интересно, что когда я печатаю значение numberOfLines
до и после запуска моей функции tapped()
, значения начинаются по-другому, а затем синхронизируются - после первого нажатия я вижу 2 строки до запуска функции, затем 0 строк после запуска функции. Однако после последующих нажатий я вижу одно и то же значение до и после своей функции, из-за чего создается впечатление, что он ничего не делает, даже если пользовательский интерфейс растягивает и уменьшает ячейку, а значение numberOfLines
изменяется в следующий раз. didSelectRowAtIndexPath
функция работает.
Я вижу это поведение только с tableView.reloadRows()
. Если я сделаю полное обновление с tableView.reloadData()
, ячейка соответствующим образом увеличится и рухнет при первом касании. Тем не менее, это выглядит немного тупо и не оживляет так хорошо, как reloadRows()
.
Реализация TableView
func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath) {
guard let cell = tableView.cellForRow(at: indexPath) as? ReviewTableViewCell
else { return }
let data = tableData[indexPath.row]
print("old number of lines: \(cell.detailLabel.numberOfLines)")
//data.isOpen is set to false initially
cell.tapped(data.isOpen)
tableData[indexPath.row].isOpen = !data.isOpen
tableView.reloadRows(at: [indexPath], with: .fade)
print("old number of lines: \(cell.detailLabel.numberOfLines)")
// tableView.reloadData()
}
Метод ячейки пользовательского представления таблицы
func tapped(_ isOpen: Bool) {
if !isOpen {
detailLabel.numberOfLines = 0 }
else {
detailLabel.numberOfLines = 2 }
}
Я ожидаю, что этот код расширит ячейку после ее перезагрузки с помощью tableView.reloadRows()
, если numberOfLines
установлен на 0, и свернет ячейку, когда она установлена на 2. Это работает, но только после нажатия на ячейку два раза + Это должно работать и с первым касанием.
Вот ссылка на gif, которая показывает проблему: https://imgur.com/a/qe2uAXj
Вот пример проекта, который похож на то, что происходит в моем приложении: https://github.com/imattice/CellLabelExample