Форум программистов, компьютерный форум, киберфорум
Наши страницы
Swift
Войти
Регистрация
Восстановить пароль
 
cheerful_weasel
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
#1

Как узнать реальную высоту кастомного хедера с автолайаутом в UI Table View?

10.10.2016, 02:48. Просмотров 612. Ответов 0
Метки нет (Все метки)

У меня есть таблица у которой одна из Prototype Cell является хедером. Ячейка кастомизирована и в ней все элементы привязаны констрейнтами. И высота хедера зависит от загруженного контента. Т.е. картинки, которые загружаются в этот хедер могут быть разной высоты, соответственно и высота хедера тогда изменится автоматически за счёт автолайаута.

Визуально всё это работает хорошо. Я добавил в viewDidLoad строки:

Код
        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 500.0
        self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
        self.tableView.estimatedSectionHeaderHeight = 500
В результате чего высота ячеек и хедера сама задаётся на основе автолайаута. Проблема возникает если в ячейках есть элементы, которые надо обновлять. К примеру мне нужно в одной из ячеек изменить количество лайков. Я меняю значение в массиве (источнике данных) для соотевтствующей позиции и делаю обновление таблицы в нужной ячейке. В результате чего таблица скролится либо вверх либо вниз на определённую высоту.

Я понимаю, что таблица берёт значения, которые я задал в estimatedRowHeight и умножает на нужное количество позиций и получает сумму высот ячеек и соответственно скролит на эту позицию. Но реальная позиция находится в другом месте и следовало бы сложить реальные высоты ячеек на основе автолайаута.

Как сделать это для ячеек таблицы я узнал. Для этого создаётся массив, где хранятся реальные высоты ячеек, а чтобы заполнить этот массив реальными высотами используется следующий метод:

Код
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
         rowHeights[indexPath.row] = cell.frame.height
    }
Если в таблице нет хедера, то это работает идеально. Но у меня есть хедер и как узнать его реальную высоту я не знаю. Мне кажется это не должно быть сложнее, чем узнать реальную высоту ячейки, но тем не менее я не нашёл этого нигде.

Подскажите, как мне определить реальную высоту хедера? Т.е. ту высоту, которая получилась с учётом высоты всего контента, который содержится в хедере.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 02:48
Ответы с готовыми решениями:

Как задать минимальную высоту ячейки в table view?
Всем привет! Я настроил автоматическую высоту ячейки. В label указал количество строк - 0. Все...

Перерисовка кастомного View
Доброго времени суток! У меня есть класс, унаследованных от UIView, отрисовка объекта этого класса...

По нажатию кнопки на View Controllere открыть Table View Controller
Как по нажатию кнопки на View Controllere открыть Table View Controller

Вместо navigation bar с table view хочу сделать просто view controller
добрый вечер. В xcode есть стандартный темплейт с navigation controller, но там по дефолту...

Table View Cell
Есть Table View Cell. Как сделать переход по нажатью push на View Controller& Добавлено через 30...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2016, 02:48

Добавление Table View
Здравствуйте,как сделать чтобы при нажатии кнопки высвечивался view,в этом view пользователь...

Заполнение Table View Controller
Доброе время суток. По нажатию кнопки осуществляется переход с View Controller на Table View...

Table View Controller не видно ячеек
Здравствуйте. Я новичек и решил начать с чтения данной ссылки...


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

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

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