iPhone Dev - Как сделать UITableView точной высоты, чтобы вместить все ячейки в нем - PullRequest
3 голосов
/ 18 июля 2011

У меня есть следующее:

http://i.imgur.com/0nDcS.png

Я хотел бы сделать так, чтобы табличное представление останавливалось прямо в ячейке «So», вместо того, чтобы все пустые ячейки находились подэто (большой план состоит в том, чтобы иметь кучу вопросов с несколькими вариантами ответов, таких как тот, что на картинке, все друг на друге в одном обзоре прокрутки).Я предполагаю, что мне нужно установить фрейм tableView, но мне было интересно, есть ли простой способ вычислить во время выполнения точную высоту части табличного представления, где реализованы ячейки (те, что с текстом на рисунке).Это сложно, потому что я сделал так, чтобы высота каждой ячейки могла изменяться в соответствии с количеством текста в ней.У кого-нибудь есть совет?

Ответы [ 3 ]

12 голосов
/ 18 июля 2011

Существует два подхода к приложениям, которые вы можете использовать.

Лучший и самый простой.
1. Добавьте нижний колонтитул в таблицу, чтобы он не рисовал строки после последней строки.подойдет пустое представление нижнего колонтитула.

       //Add empty view to hide trailing row seperators
UIView *emptyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 0)];
emptyView.backgroundColor = [UIColor whiteColor];
[tableView setTableFooterView:emptyView];
[emptyView release];

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

2 голосов
/ 18 июля 2011

Нет функции tableView:sizeOfAllCells:, если это то, что вы ищете.Исходя из вашего вопроса, звучит так, как будто вы настраиваете размер таблицы, чтобы вы могли поместить другое содержимое в ее нижнюю часть.

Вы правы, говоря, что вы хотите изменить свойство frame вашего UITableView в соответствии с высотой.

[table setFrame:CGRectMake(0,0,table.frame.size.width,heightOfCells)];

Есть несколько вещей, которые вы могли бы сделать, хотя.Если бы у вас был массив всех ячеек, вы могли бы очень быстро пройтись по нему и добавить высоту каждой из них.Вы можете (хотя я не особенно это рекомендую) зациклить число имеющихся у вас секций и строк, используя tableView:cellForRowAtIndex: вместо массива ячеек, и получить высоты таким образом.Если каждая ячейка имеет одинаковую высоту (звучит так, как это возможно, это не так), вы можете просто сделать простую математику, чтобы выяснить высоту.Наконец, вы можете сохранить словарь или массив высот и обновить его в tableView:cellForRowAtIndex:, чтобы при изменении содержимого обновлялся размер, но тогда вам нужно было бы вызвать reloadData.Это всего лишь несколько идей о способах решения этой конкретной проблемы.

1 голос
/ 18 июля 2011

Вот хак (поэтому подождите, чтобы увидеть, найдется ли лучшее решение):

Используйте numberOfSections, чтобы получить количество секций (если вы позже перейдете к сгруппированному стилю), а затем сложитеheight с rectForSection: для каждого из разделов (в простом стиле, просто возьмите rectForSection:0).Может быть, добавим немного к этому для разделителей.

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