UICollectionView внутри UITableViewCell: порядок `reloadData` для каждого?

У меня есть UICollectionView внутри UITableViewCell, ограничения заключаются в том, что представление коллекции соответствует границе ячейки.

В зависимости от некоторых внешних данных (которые регулярно обновляются) я создаю разные ячейки представления коллекции (маленькие и большие), и они имеют разную высоту.

Когда я получаю внешние данные, я перезагружаю представление коллекции и представление таблицы по порядку:

  1. перезагрузить представление коллекции для новых ячеек для внешних данных
  2. перезагрузить представление таблицы для новой высоты для этой конкретной строки

Проблема в том, что если, скажем, я получил некоторые данные, для которых требуется маленькая ячейка представления коллекции, высота ячейки табличного представления будет маленькой, а затем, если поступят новые данные, для которых требуется большая ячейка представления коллекции, на шаге 1 представление коллекции по-прежнему имеет маленький размер, но ячейка внутри нее будет большой, тогда я получил это предупреждение:

высота элемента должна быть меньше, чем высота UICollectionView за вычетом верхних и нижних значений вставки раздела, за вычетом верхних и нижних значений вставок содержимого.

Он отлично работает, если я получил данные для большой ячейки, а затем новые данные для маленькой ячейки.

Итак, каким должен быть правильный способ сделать это?

Спасибо!


person hzxu    schedule 11.05.2017    source источник
comment
@iphonic OP имеет UICollectionView внутри UITableViewCell, а не наоборот.   -  person Mike Taverne    schedule 11.05.2017
comment
Когда вам нужно перезагрузить представление коллекции с другим размером ячейки, порядок обновления пользовательского интерфейса должен быть 1. Без автоматического макета — представление таблицы перезагружает строки с индексом строки, имеющим представление коллекции, которое нужно обновить, и возвращает соответствующую высоту строки — перезагрузить представление коллекции. 2. С автоматическим макетом: - Обновить ограничение высоты представления коллекции - Перезагрузить представление коллекции   -  person vignesh    schedule 12.05.2017


Ответы (1)


Вы установили это на viewDidLoad?

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = CGFloat(60.0) //your best height estimate
person pesch    schedule 11.05.2017
comment
На самом деле я думал об этом, но автоматический размер потребовал бы, чтобы содержимое ячейки таблицы (т.е. представление коллекции в моем случае) имело внутренний размер содержимого, но представление коллекции (т.е. представление прокрутки) имеет странное поведение в отношении внутреннего размера содержимого. . - person hzxu; 11.05.2017
comment
В противном случае вы можете сохранить высоту свойства и вызвать: tableView.beginUpdates() tableView.endUpdates(). Это приведет к изменению высоты без перезагрузки данных. - person pesch; 11.05.2017
comment
Спасибо @pesch, позвольте мне попробовать - person hzxu; 11.05.2017