Проблемы с динамической высотой UITableViewCell - PullRequest
0 голосов
/ 03 декабря 2009

Хорошо, я работаю над проектом, и было бы ОЧЕНЬ полезно, если бы я мог каким-то образом выяснить, как изменить одну (или все) ячейки так, чтобы их высота зависела от количества текста, который они содержат. В internet я нашел учебное пособие, которое показалось мне вполне осуществимым, но я просто застрял, потому что я копирую и вставляю его код прямо в мое приложение, и появляется ошибка, где его код гласит:

NSString *text = [items objectAtIndex:[indexPath row]];

Если есть быстрое исправление с помощью этого учебника, или если кто-то может объяснить, о чем идет речь, это было бы здорово

Ответы [ 4 ]

5 голосов
/ 03 декабря 2009

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

Однако, когда вы будете готовы, вот примерный план того, как вы делаете ячейки переменной высоты:

1) Пусть heightForRowAtIndexPath возвращает собственную высоту для каждой строки

2) В этом методе определите, каким будет текст строки, затем используйте метод:

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode

(На NSString, в UIStringDrawingAdditions), чтобы выяснить, какую высоту возвращать (вам нужна высота текста плюс некоторые отступы). Ширина - это ширина метки, которая будет содержать текст, возвращенный CGSize содержит высоту, которой будет метка при использовании этого текста.

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

4) Если вы используете настраиваемую ячейку, вам нужно убедиться, что высота метки изменяется в соответствии с помещаемым вами текстом - высота ячейки уже будет установлена ​​на основе метода heightForRowAtIndexPath. Я думаю, что обычный UITableViewCell, вероятно, будет иметь текстовые метки с изменением размера по высоте вместе с ячейкой, если нет необходимости изменять их тоже.

5) Установите текст, который вы используете на этикетке, и наслаждайтесь.

Ключ к пониманию состоит в том, что вам действительно нужна высота дважды: один раз в heightForRow (который контролирует высоту ячейки), а затем снова, когда вы фактически настраиваете текст в ячейке (чтобы убедиться, что метка имеет правильный размер) .

4 голосов
/ 03 декабря 2009

Я думаю, что ты опередил себя. Вы должны понимать основы Objective-C, такие как массивы, строки и т. Д., А также основы заполнения таблицы, прежде чем начинать пытаться установить пользовательские высоты строк. Я бы порекомендовал эту тему для начала: Howto статей о разработке iPhone.

Я нашел Начало разработки для iPhone Изучение iPhone SDK Автор: Дэйв Марк; Джефф Ламарш очень полезен, но у меня был сильный опыт в Objective-C. Программирование в Objective-C 2.0, второе издание Автор: Стивен Г. Кочан - хороший справочник по Objective-C. Оба доступны онлайн по подписке, поэтому вам не нужно тратить $ 80, чтобы начать.

1 голос
/ 03 декабря 2009

В этом примере 'items' - это NSArray, который содержит значения, которые будут добавлены как ячейки в таблицу. Часто вы должны заполнить такой массив в вашем

-(void)viewDidLoad

или

-(void)viewWillAppear:(BOOL)animated

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

в вашем заголовочном файле вы бы хотели

NSArray *items;

и

@property(nonatomic,retain)NSArray *items;

и в вашем .m файле

@synthesize items;

затем в любом из перечисленных выше методов это

self.items = /* however you can build an NSArray with the data you need*/
0 голосов
/ 03 декабря 2009

Переменная NSString* text представляет строку, которую вы хотите отобразить в этой ячейке. Если вы не знаете И что «ваше приложение» не знает, что отображать, задайте вам вопрос: что вы хотите, чтобы ваше приложение отображало? Какие данные?

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