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

Objective-C

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

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

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

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

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

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

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

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

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

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

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

Как добавить блок AdMob на UITableView? - Программирование iOS
Здравствуйте! Возникла проблема при добавлении блока AdMob на UITableView. Проблема в том, что при добавлении блока в таблицу, блок...

Как изменить вид группированного UITableView? - Программирование iOS
Здравствуйте пробую писать под iPhone на Xamarin хочу сделать дизайн главного вида похожем на этот: ...

Как при дозагрузке данных показать UIActivityIndicatorView внизу UITableView? - Objective-C
Есть UITableViewController, в tableView: willDisplayCell: forRowAtIndexPath: если это последняя строка таблицы я в фоновом потоке вызываю...

Как поймать момент, когда ячейка UITableView показалась на экране? - Программирование iOS
начал для этого использовать tableView:willDisplayCell:forRowAtIndexPath: но если там сделать то ячейку мы не получим, получается её ещё...

Как сделать асинхронную загрузку картинок в UITableView не останавливая главный поток? - Objective-C
Точнее как показать асинхронно загруженные картинки не останавливая главный поток? Есть UITableViewController, по мере появления ячеек...

UITableView Section - Objective-C
Доброго времени суток. Вопрос состоит в следующем. Есть таблица в стиле Grouped. Есть одна секция с тремя ячейками и в footer есть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
30.09.2014, 10:52 #2
с картинками и по мере прокрутки таблицы я буду подгружать из в массив NSMutableArray не станет ли он слишком большим для хранения в оперативной памяти
SDWebImage
0
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
30.09.2014, 14:36 #3
Нужно взять и переопределить метод делегата UITableViewDelegate tableView:heightForRowAtIndexPath
0
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
03.10.2014, 02:15 #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]];
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2014, 02:15
Привет! Вот еще темы с ответами:

Несуществующий UITableView - Программирование iOS
Добрый вечер. Столкнулся с такой проблемой: создал простое приложение с UITableView. делал по уроку, все как положено. В момент запуска...

Сортировка в UITableView - Программирование iOS
Добрый день. Во время разработки столкнулся с необходимостью сортировки, а так же связанным с ней багом. Обо всем по порядку. 1....

UITableView запутался с вьюхой - Программирование iOS
Коллеги что-то я запутался. Есть storyboard, в нем UIViewController с UITableView. Из таблички UI элементов перетягиваю UIView... его можно...

UITableView & UIButton - Программирование iOS
Доброго времени суток. Возник вопрос у меня есть таблица с 3-мя ячейками мне нужно при выборе ячейки менять Title кнопки на тот текст...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.10.2014, 02:15
Ответ Создать тему
Опции темы

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