Можно ли получить высоту заголовка раздела динамического табличного представления с помощью автоматической компоновки?
новое в iOS 8 вы можете получить 100% динамические ячейки таблицы, просто установив предполагаемую высоту строки, а затем расположите свои элементы в ячейке с помощью автоматической компоновки. Если содержание увеличивается в высоту, ячейка также будет увеличиваться в высоту. Это чрезвычайно полезно, и мне интересно, может ли тот же подвиг быть выполнен для заголовков разделов в табличном представлении?
можно ли, например, создать UIView
на tableView:viewForHeaderInSection:
добавьте UILabel
subview, укажите ограничения автоматической компоновки для метка против представления и увеличение высоты представления, чтобы соответствовать содержимому метки, без необходимости реализации tableView:heightForHeaderInSection:
?
документация viewForHeaderInSection
заявляет: "Этот метод работает только правильно, когда tableView: heightForHeaderInSection: также реализован."Я не слышал, изменилось ли что-нибудь для iOS 8.
если вы не можете этого сделать, каков наилучший способ имитировать это поведение?
6 ответов:
это возможно. Он является новым прямо рядом с динамическими высотами ячеек, реализованными в iOS 8.
это очень просто. Просто добавьте это в
viewDidLoad
:self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; self.tableView.estimatedSectionHeaderHeight = 25;
затем переопределить
viewForHeaderInSection
и использовать автоматическую компоновку, чтобы ограничить элементы в вашем представлении, как показано на рисунке. Вот так! Не нужно реализовыватьheightForHeaderInSection
. И на самом делеsectionHeaderHeight
не нужно также заявлять, Я просто добавил его для ясности.обратите внимание, что в iOS 11 ячейки и представления верхнего / нижнего колонтитула используют оценочные высота по умолчанию. Единственное, что нужно сделать, это предоставить расчетную высоту, чтобы лучше информировать систему, чего ожидать. Значение по умолчанию:
UITableViewAutomaticDimension
но вы должны предоставить лучшую оценку, что это средняя высота они будут, если это возможно.
Это может быть достигнуто путем установки (или возврата)
estimatedSectionHeaderHeight
на вашем представлении таблицы.если ваш заголовок раздела перекрывает ваши ячейки после установки
estimatedSectionHeaderHeight
убедитесь, что вы используетеestimatedRowHeight
Как хорошо.(я добавляю этот ответ, потому что второй абзац содержит ответ на вопрос, который можно найти после прочтения всех комментариев, которые некоторые могут пропустить.)
пробовал
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; self.tableView.estimatedSectionHeaderHeight = 25;
но это не правильно размер заголовка с многострочной надписи. Добавил Это, чтобы решить мою проблему:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Recalculates height tableView.beginUpdates() tableView.endUpdates() }
Я изменил iuriimozответ. Только что заменил метод viewWillAppear:
tableView.sectionHeaderHeight = UITableViewAutomaticDimension tableView.estimatedSectionHeaderHeight = 25 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Recalculates height tableView.layoutIfNeeded() }
также добавьте tableView.layoutIfNeeded () to
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) tableView.layoutIfNeeded() }
для iOS 10
tableView.beginUpdates() tableView.endUpdates()
есть" исчезают " эффект анимации на viewWillAppear для меня
Да, это работает для меня. Я должен сделать больше изменений, как показано ниже:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let label = UILabel() label.numberOfLines = 0 label.text = my own text return label }
В моем случае:
- установить программно не работает.
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.
набор в раскадровке не работает.
переопределить
heightForHeaderInSection
работала.override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return UITableViewAutomaticDimension }
испытательные среды:
- Mac OS 10.13.4
- XCode Версии 9.4.1
- симулятор iPhone 8 Плюс