heightForHeaderInSection вызывается только один раз

#ios #uitableview #layout #header #swift3

#iOS #uitableview #макет #заголовок #swift3

Вопрос:

Кодирование в Swift 3. Иметь представление таблицы с пользовательскими ячейками и заголовком.

У меня есть представление таблицы с пользовательскими ячейками и заголовками. Заголовки содержат две (2) метки и имеют динамическую высоту ячейки, поскольку метки могут быть длинными. Моя проблема заключается в том, что при первом настройке TableView и разделов ярлык отображается так, как должен, ОДНАКО после прокрутки вниз и последующего резервного копирования макет заголовков каким-то образом ломается.

При первой загрузке TableView и прокрутке пользователя вниз все выглядит нормально

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

После прокрутки вниз и резервного копирования метка обрезается

После распечатки того, какие методы вызываются, я обнаружил, что при первой прокрутке вниз по TableView вызываются следующие две (2) переопределяющие функции.

 override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    print("(section) heightForHeaderInSection")
    print("(section) returning AUTO for header")
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    print("(section) viewForHeaderInSection")
    let header = tableView.dequeueReusableCell(withIdentifier: "QuestionHeader") as! QuestionHeader
    header.delegate = self
    header.contentView.backgroundColor = UIColor.groupTableViewBackground
    header.questionTextLabel.text = String(questionStringArray[section])
    header.questionNumberLabel.text = (String(section   1)   ")")
    return header.contentView
}
  

Но когда я прокручиваю назад, вызывается ТОЛЬКО функция viewForHeader, и я думаю, поскольку высота больше не устанавливается в UITableViewAutomaticDimension, метки обрезаются?

Есть идеи?

Комментарии:

1. @ozgur Я попытался проголосовать, но случайно «отменил» его, и это мне не позволит. Не могли бы вы опубликовать свой ответ, чтобы я мог поддержать вас? Еще раз спасибо!

Ответ №1:

Вы должны вернуть header вместо метода header.contentView from tableView: viewForHeaderInSection: :

 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  let header = tableView.dequeueReusableCell(...
  ...
  return header
}