Высота содержимого расширяемого UItableview различается при развернутом или свернутом - PullRequest
0 голосов
/ 26 июня 2018

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

Я обновляю размер контейнера с помощью tableview.contentsize.height, но обнаружил, что размер содержимого отличается при его развертывании или свертывании.

Например, предположим, что есть 4 раздела, если я сверну 3-й и 4-й разделы, просмотр таблицы вернет мне высоту 200. Между тем, если я раскрою таблицу только на 1-й и 2-й раздел, а 3-й и 4-й свернут, содержимое размер высота более 200.

Я нахожу очень разочарованным, почему программа дает мне такую ​​запутанную информацию, потому что мне нужна правильная высота размера контента, чтобы обновить представление контейнера. Кто-нибудь здесь может просветить меня?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вместо использования contentSize попробуйте рассчитать высоту самостоятельно. Будет намного проще, если каждая клетка будет одинаковой высоты. Допустим, все они имеют высоту 50, и в секции 1 есть 1 строка, а в секции 2 - 3 строки (1 + 3) * 50 = высота контейнера. Очевидно, что если у вас есть разделы и вставки, вам также нужно будет включить это в свой расчет.

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

Если это не работает для вас, пожалуйста, будьте более информативны и добавьте немного кода.

0 голосов
/ 26 июня 2018

Поведение размера контента, которое вы описали, является правильным. Если вы хотите узнать высоту UITableView, вы должны смотреть на ее фрейм, а не на размер ее содержимого.

Я не уверен, зачем вам нужен контейнерный вид для табличного представления, вы можете расположить его как простой UIView, тогда у вас будет на одну проблему меньше, просто измените фрейм tableView.

Обновление

После прочтения комментариев я вижу, что вы хотите tableView внутри tableViewCell. Большую часть вам придется делать самостоятельно, но я могу помочь вам с UITableViewAutomaticDimension.

Попробуйте добавить это в свой viewController:

 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
 }

 override func tableView(tableView: UITableView, estimatedHeightForRowAt indexPath: NSIndexPath) -> CGFloat {
    return 44//approximate cell height
 }

Главное - правильно установить ограничения в конструкторе интерфейсов. И помните, что ограничения не изменят высоту ячейки на компоновщике, возможно, вам придется сделать это самостоятельно в инспекторе размеров. В любом случае, если вы этого не сделаете - размер будет изменен во время сборки.

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