Заголовки заголовка tableView исчезают SWIFT

У меня есть таблицаView, настроенная так, что, когда ячейка касается, она расширяется по высоте, чтобы показать больше информации. TableView имеет 5 разделов.

У меня есть ошибка: когда ячейка расширяется, все заголовки подкачки ниже этой ячейки становятся невидимыми. Консоль выводит следующее: "[31233: 564745] нет указательного пути для повторного использования ячейки таблицы"

В моей раскадровке у меня есть 2 пользовательских ячейки: "myCell" для ячеек, несущих данные, и "headerCell" для заголовков.

func tableView (tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

   let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row]


    if self.currentPath != nil && self.currentPath == indexPath  {
        self.currentPath = nil
    } else {
        self.currentPath = indexPath
    }
    tableView.beginUpdates()
    tableView.endUpdates()
}

Если я вхожу в tableView.reloadData() между обновлениями begin/end, он работает правильно, хотя фон заголовка становится черным и теряет анимацию.

У меня есть все для заголовков, объявленных в: func tableView (tableView: UITableView, viewForHeaderInSection: Int) → UIView?

что мне не хватает? Мне бы очень хотелось, чтобы tableView по-прежнему имел анимацию и сохранял background clearColor().

Заранее спасибо. Я прочитал объективные ответы C, но не мог заставить их работать для меня. Я очень благодарен за помощь SWIFT.

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

Ответ 1

Я нашел ответ на выходе консоли. Используйте этот код в функции заголовка:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

Не возвращайте свой headerCell или ваш повторно используемый идентификатор. Верните reuseIdentifier.contentView. Для меня это: return headerCell!.contentView.

Ответ 2

Просто чтобы добавить, я был сбит с толку за WAY дольше, чем должен был быть, почему я не мог ссылаться на contentView моей камеры, когда я вполне мог видеть, что это было там. Мой пользовательский класс (используя UITableViewCell, а не UITableViewHeaderFooterView) возвращал бы фатальную ошибку каждый раз. Поэтому убедитесь, что пользовательский стиль настраивается в классе UITableViewHeaderFooterView, например:

class CustomHeaderCell: UITableViewHeaderFooterView {

Вам также необходимо зарегистрировать resuableIdentifer следующим образом:

tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")

Тогда этот плохой мальчик:

    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
    return headerCell!.contentView
}

Ответ 3

Поскольку у меня еще нет репутации 50, я не могу прокомментировать предыдущий ответ, поэтому я приношу свои извинения за то, что вы указали это как еще один ответ.

Возврат ContentView заставит эту функцию работать, но удалит все форматирование, сделанные для reuseIdentifier (headerCell)

headerCell.backgroundColor = UIColor.cyanColor()

Это НЕ будет содержать голубой цвет для вашего headerCell

Чтобы исправить это, просто добавьте ".contentView" в ваши строки форматирования

headerCell.contentView.backgroundColor = UIColor.cyanColor()

Ответ 4

Заголовки заголовков таблиц в 2 таблицах исчезли, когда я конвертировал приложение в IOS 10 - я нашел причину в документации API разработчика Apple в заголовках таблиц. Когда я добавил следующее, пропавшие заголовки снова появились!

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
return 44 // where 44 is the header cell view height in my storyboard
}

Ответ 5

У меня была такая же ошибка, потому что я возвращал ячейку, используя метод dequeue, а не UITableViewHeaderFooterView.

Решение:

  • Добавить представление вне иерархии представлений
  • Установите тип в UITableViewHeaderFooterView
  • Настроить
  • Ссылка на @IBOutlet
  • В func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) → UIView? вернуть выход

Общие подводные камни:

Не забудьте установить размеры заголовков. Не забудьте установить прочную розетку.

Ответ 6

Вы можете обернуть ячейку viewview внутри UIView

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

let containerView = UIView()
guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") }
containerView.addSubview(headerCell)
return containerView
}