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

Swift

Войти
Регистрация
Восстановить пароль
 
cheerful_weasel
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 19
#1

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

10.10.2016, 02:48. Просмотров 519. Ответов 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
    }
Если в таблице нет хедера, то это работает идеально. Но у меня есть хедер и как узнать его реальную высоту я не знаю. Мне кажется это не должно быть сложнее, чем узнать реальную высоту ячейки, но тем не менее я не нашёл этого нигде.

Подскажите, как мне определить реальную высоту хедера? Т.е. ту высоту, которая получилась с учётом высоты всего контента, который содержится в хедере.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 02:48     Как узнать реальную высоту кастомного хедера с автолайаутом в UI Table View?
Посмотрите здесь:
Как задать минимальную высоту ячейки в table view? Swift
Swift Как из одного View передать переменную в другой?
Swift Как из одного View Controller передать переменную в другой
Выбор View Swift
Не получается ассоциировать view из tabcontroller с кодом Swift
Воспроизведение видео AV Kit Player View Controller Swift
Как узнать реальную высоту заголовка DataGrid C# WPF
Перерисовка кастомного View
По нажатию кнопки на View Controllere открыть Table View Controller
Вместо navigation bar с table view хочу сделать просто view controller
PHP БД CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table doesn't exist
HTML, CSS Table View на html как сделать

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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