Можно ли использовать самоклеющиеся клетки в самоклеящихся клетках? - PullRequest
0 голосов
/ 10 мая 2019

Я хочу, чтобы ячейки самоконтроля находились в виде таблицы с ячейками самоконтроля. Но при первой инициализации некоторые ячейки не верны. После прокрутки до дна и снова отобразятся ячейки, размер ячейки правильный. На скриншоте видно, что в верхних 2 ячейках внизу есть пробел, а в третьей нет. Все они должны выглядеть как третий.

enter image description here

Это проблема моего основного проекта. Скриншот

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

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

Точные значения рассчитываются только для отображаемых ячеек (видимых в текущем кадре прокрутки).

Сложность в том, что внутренние ячейки (внутри вашей внешней ячейки) не отображаются, пока не будет отображена внешняя ячейка, поэтому внешняя ячейка не имеет правильно рассчитанного размера. Также обратите внимание, что UITableView не обновляет автоматически высоту ячейки, если явно не указано иное.

Решение, если вам действительно нужно это сделать, - правильно рассчитать высоту внешней ячейки перед ее отображением и вручную установить ограничение высоты.

Если вы знаете высоту (из источника данных), это легко. Если вам действительно нужно вычислить высоту внутренней таблицы, вы можете сделать что-то вроде этого:

// make the table high enough to display all cells
innerTableHeightConstraint.constant = 2000
// reload table
innerTable.reloadData()
// force layout
innerTable.layoutIfNeeded()
// now the contentSize is correctly calculated
innerTableHeightConstraint.constant = innerTable.contentSize.height

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

0 голосов
/ 10 мая 2019

Вы не должны заключать UITableView в UITableViewCell, попробуйте вместо этого использовать UITableView Sections, чтобы добавить дополнительный уровень глубины к UITableView.

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