Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
vitalik_a
4 / 4 / 1
Регистрация: 11.09.2014
Сообщений: 81
#1

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

30.09.2014, 10:46. Просмотров 997. Ответов 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):

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

Как добавить блок AdMob на UITableView?
Здравствуйте! Возникла проблема при добавлении блока AdMob на UITableView....

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

Как при дозагрузке данных показать UIActivityIndicatorView внизу UITableView?
Есть UITableViewController, в tableView: willDisplayCell: forRowAtIndexPath:...

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

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

3
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
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
160 / 160 / 68
Регистрация: 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 Section
Доброго времени суток. Вопрос состоит в следующем. Есть таблица в стиле...

Сортировка в UITableView
Добрый день. Во время разработки столкнулся с необходимостью сортировки, а так...

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

UITableView запутался с вьюхой
Коллеги что-то я запутался. Есть storyboard, в нем UIViewController с...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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