Заголовки заголовка 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
}