Новое в iOS 8: вы можете получить 100% ячеек динамического табличного представления, просто установив предполагаемую высоту строки, а затем разместив свои элементы в ячейке с помощью Auto Layout. Если содержимое увеличивается в высоту, высота ячейки также увеличивается. Это чрезвычайно полезно, и мне интересно, можно ли сделать то же самое для заголовков разделов в табличном представлении?
Можно, например, создать UIView
в tableView:viewForHeaderInSection:
добавить UILabel
подвид, указать ограничение Автокомпоновки для метки с точкой зрения, и есть увеличение вида в высоту , чтобы соответствовать содержимому лейло, без необходимости реализовывать tableView:heightForHeaderInSection:
?
В документации для viewForHeaderInSection
говорится: «Этот метод работает правильно только в том случае, если также реализован tableView: heightForHeaderInSection:». Я не слышал, изменилось ли что-нибудь в iOS 8.
Если это невозможно, как лучше всего имитировать такое поведение?
источник
UITableViewAutomaticDimension
говорится, что «если вы возвращаете эту константу вtableView:heightForHeaderInSection:
илиtableView:heightForFooterInSection:
,UITableView
используется высота, соответствующая значению, возвращаемому изtableView:titleForHeaderInSection:
илиtableView:titleForFooterInSection:
(если заголовок не соответствуетnil
)».estimatedSectionHeaderHeight
илиtableView:estimatedHeightForHeaderInSection:
И,sectionHeaderHeight
илиtableView:heightForHeaderInSection:
. Кроме того, если вы используете методы делегата, вы должны вернуть значение больше 1,00 для оценки (полностью недокументированное поведение), в противном случае делегат для высоты НЕ будет вызываться и будет использоваться высота заголовка представления таблицы по умолчанию.Этого можно добиться, установив (или вернув)
estimatedSectionHeaderHeight
вид таблицы.Если заголовок раздела перекрывает ваши ячейки после настройки
estimatedSectionHeaderHeight
, убедитесь, что вы также используетеestimatedRowHeight
.(Я добавляю этот ответ, потому что второй абзац содержит ответ на проблему, которую можно найти после прочтения всех комментариев, которые некоторые могут пропустить.)
источник
estimatedRowHeight
это работает как шарм :)Застрял в той же проблеме, когда заголовок получал нулевую высоту до тех пор, пока я не предоставил фиксированную высоту в делегате для
heighForHeaderInSection
.Пробовал много решений, включая
Но ничего не вышло. В моей камере тоже использовались правильные автопластины. Строки меняли свою высоту динамически с помощью следующего кода, но заголовок раздела - нет.
Исправление чрезвычайно простое и странное, но мне пришлось реализовать методы делегата вместо однострочного кода для
estimatedSectionHeaderHeight
и,sectionHeaderHeight
который в моем случае выглядит следующим образом.источник
Swift 4+
рабочий (проверено 100%)
Если вам нужны оба раздела, а также строка с динамической высотой в зависимости от содержимого, вы можете использовать следующий код:
В viewDidLoad () напишите следующие строки:
Теперь мы установили высоту строки и высоту раздела с помощью методов делегата UITableView:
источник
Я попытался
но заголовок не соответствует размеру многострочной метки. Добавил это, чтобы решить мою проблему:
источник
tableView:estimatedHeightForHeaderInSection
иtableView:heightForHeaderInSection
вместо определения в viewDidLoad.estimatedSectionHeaderHeight
необходима только ниже iOS 11В моем случае:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.установить в раскадровке не получится .
переопределение
heightForHeaderInSection
сработало .тестовая среда:
источник
Да, у меня работает. Мне нужно внести больше изменений, как показано ниже:
источник
Я изменил ответ iuriimoz . Просто заменил метод viewWillAppear:
Также добавьте tableView.layoutIfNeeded () в
Для iOS 10
иметь эффект "затухания" анимации при просмотре
источник