Невозможно изменить размер UITableViewCell, содержащего UIView

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

-> tablecell1

->UIView1 высота h1

-> tablecell2

->UIView2 высота h2

Высота ячейки ячейки должна варьироваться в зависимости от размера UIView. В настоящее время я звонюtableView:heightForRowAtIndexPath: для изменения высоты клика по ячейке. However this doesn't work if the UIViews are of variable heights and the bigger view gets clipped.

Is there a better way of solving it?

1 ответ

Хорошо, так быстро tableView:heightForRowAtIndexPath: не должен вызываться вашим контроллером.

Самая большая проблема, с которой я всегда сталкиваюсь при динамическом определении размера ячеек, заключается в том, что heightForRowAtIndexPath вызывается очень рано в процессе компоновки таблицы, поэтому, по сути, высота каждой ячейки должна быть известна до обращения к макету таблицы. В любом случае, я предполагаю, что вы используете настраиваемую ячейку табличного представления и поместили туда UIView... Если нет, сделайте.

Первое: бросить функцию класса в CustomTableViewCell с именем heightNeededForTableViewCellWithView:(UIView *)view и определите высоту, которую вы хотели бы, обработайте условие, где вид равен нулю и что default Размер должен быть.

Второе: вызовите эту функцию класса, когда tableView:heightForRowAtIndexPath: называется, и так как у вас есть источник данных в вашем контроллере, вы можете динамически возвращать heightNeededForTableViewCellWithView:viewAtRow исходя из представления, которое вы хотели бы показать для этой строки!

Третье: когда пользователь касается ячейки, запомните, какой индекс он коснулся, и вызовите [tableView reloadData], который вызовет tableView:heightForRowAtIndexPath:

Другие вопросы по тегам