Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
vitalik_a
4 / 4 / 1
Регистрация: 11.09.2014
Сообщений: 81
#1

Как наполнять UITableView ячейками разной высоты? - Objective-C

30.09.2014, 10:46. Просмотров 864. Ответов 3
Метки нет (Все метки)

у меня в приложении есть класс DomainNewsTableViewController : UITableViewController

в методе viewDidLoad я загружаю с сайта данные в массив объектов NSMutableArray, со свойствами типа NSString - это заголовки и даты новостей

в методе tableView:cellForRowAtIndexPath: я беру из массива объектов соответствующий индексу объект и создаю UILabel, который добавляю в ячейку

ячейки получаются разной высоты в зависимости от текста

Вопрос: Как определить высоту строки таблицы в tableView:heightForRowAtIndexPath: если ячейка ещё не создана?

Добавлено через 6 минут
Пока придумал два варианта:
1. Временно создавать UILabel в tableView:heightForRowAtIndexPath: только для того чтобы узнать его высоту. В этом не нравится то что этот же код будет выполняться ещё раз в tableView:cellForRowAtIndexPath:
2. Создавать UILabel сразу при загрузке данных с сайта и хранить их все в массиве вместо NSString.

Добавлено через 2 минуты
Во втором варианте кажеться неправильным хранить в памяти много объектов интерфейса которых уже нет на экране.

Добавлено через 17 минут
И ещё вопрос: если на сайте очень много новостей с картинками и по мере прокрутки таблицы я буду подгружать из в массив NSMutableArray не станет ли он слишком большим для хранения в оперативной памяти?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2014, 10:46     Как наполнять UITableView ячейками разной высоты?
Посмотрите здесь:

Objective-C Дозагрузка данных в UITableView при скролле
Изменение высоты UITableViewCell Objective-C
Objective-C Как при дозагрузке данных показать UIActivityIndicatorView внизу UITableView?
Как сделать асинхронную загрузку картинок в UITableView не останавливая главный поток? Objective-C
Исчезает разделитель при скролле UITableView Objective-C
UITableView Section Objective-C
Objective-C UITableView - footer не уходит за экран

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
30.09.2014, 10:52     Как наполнять UITableView ячейками разной высоты? #2
с картинками и по мере прокрутки таблицы я буду подгружать из в массив NSMutableArray не станет ли он слишком большим для хранения в оперативной памяти
SDWebImage
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
30.09.2014, 14:36     Как наполнять UITableView ячейками разной высоты? #3
Нужно взять и переопределить метод делегата UITableViewDelegate tableView:heightForRowAtIndexPath
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 390
03.10.2014, 02:15     Как наполнять UITableView ячейками разной высоты? #4
Создайте где-нибудь метод, желательно в классе новостей(если такой есть), типа
Objective-C
1
2
3
4
5
6
7
8
9
+(CGFloat)heightOfNews:(News *)news
{
    CGSize maximumLabelSize = CGSizeMake(310, 1000); // 310 - максимальная ширина лейбла, 1000 - максимальная высота 
    CGRect textRect = [news.content boundingRectWithSize:maximumLabelSize  // news.content - то, что надо отобразить
                                        options:(NSStringDrawingUsesLineFragmentOrigin)
                                     attributes:@{NSFontAttributeName:[UIFont fontWithName:@"System" size:18]} // используемый для новости шрифт
                                        context:nil];
    return textRect.size.height + 140; // 140 - то, что постоянно, суммарная высота отступов и тп
}
который будет возвращать высоту ячейки основываясь на параметрах исходного текста. Соотвественно если лейблов много разных, используйте несколько boundingRectWithSize: ...

А потом в tableView:heightForRowAtIndexPath: будете писать
Objective-C
1
return [News heightOfNews:self.news[indexPath.row]];
Yandex
Объявления
03.10.2014, 02:15     Как наполнять UITableView ячейками разной высоты?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru