Представления заголовка таблицы в StoryBoards

191

Есть ли способ вставить представление заголовка таблицы (tableHeaderView) в StoryBoard (как мы это делали в Interface Builder)?

Тайлер ДеВитт
источник

Ответы:

349

Похоже, вы просто перетаскиваете элемент управления в верхнюю часть представления таблицы. Я не ожидал, что это будет так просто.

Перед падением

Перед падением

После падения

После падения

Мистер роджерс
источник
29
Я был удивлен, обнаружив, что это так. В своей реализации я заметил, что для правильной работы мне пришлось удалить код раздела heightForHeaderInSection: (NSInteger), в противном случае у меня появилось бы дополнительное пространство над представлением заголовка. Кроме того, для того, чтобы этот заголовок «прилип» к верхней части табличного представления, мне пришлось реализовать раздел viewForHeaderInSection: (NSInteger) и вернуть это представление.
Оз
13
Кажется, это работает, только если в таблице есть хотя бы одна ячейка-прототип.
Accatyc
4
@cdo, не могли бы вы рассказать, как вы смогли заставить заголовок «прилипать» вверху таблицы? Я попытался реализовать вслепую viewForHeaderInSection:и получил сообщение об ошибке «Невозможно одновременно удовлетворить ограничения». (Смотрите мой вопрос здесь: stackoverflow.com/questions/14554051/… )
ryanrhee
2
Спасибо, я не мог этого сделать, пока не знал, что это сработает, требуется точное перетаскивание. Я пытался сделать это несколько раз ...
Дэйв Росс
1
Вы можете использовать контур слева для выполнения перетаскивания, что проще, чем пытаться попасть в точное место над первой ячейкой прототипа, если вы хотите установить вид заголовка таблицы. Я заметил - может быть, ошибка XCode (5.0) - что это будет работать только тогда, когда я сначала переместил представление из обычной иерархии; Я перетащил его до конца схемы для этой сцены. Затем, на втором шаге, я мог бы переместить его в представление таблицы.
Даниэль Шнеллер,
10

Вы можете легко это сделать, перетащив UIView/ UIImageViewчуть ниже UITableViewконтура документа (вместо макета).

Если вы попытаетесь перетащить макет вместо контура документа, то UITableViewCellперейдете к началу обработки, что разочаровывает!

ПАНКАЖ ВЕРМА
источник
-2

Перетаскивание представления поверх табличного представления работало только для одного размера экрана, по крайней мере, в Xcode 11. На разных экранах оно не подходило по размеру.

Я просто создал представление и оставил его там за таблицей в раскадровке. Я создал для этого IBOutlet:

@IBOutlet weak var audioView: UIView!

Затем в коде таблицы я сделал:

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

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 142
}

Это работало хорошо на всех размерах экрана.

Бадр
источник
1
Вопрос касается представления заголовка таблицы, а не представления заголовка раздела.
Р. Ринкон
@Р. Rincón, где я упоминал заголовок раздела? Раздел в методах необходим из фреймворка. В каждом TableView есть хотя бы один раздел, если вы этого не знаете. Просто пройдите раздел 0, если у вас нет разделов.
Бадр
Этот код возвращает audioView для каждого раздела в качестве заголовка раздела. Если кто-то реализует это, tableView.tableHeaderView будет нулевым. Если у них есть 5 разделов, у них будет пять заголовков разделов. Если они уже имеют заголовки разделов и хотят добавить представление заголовка таблицы, этот ответ им не поможет. Это не отвечает на вопрос, который конкретно упоминает tableHeaderView.
Р. Ринкон
Вы можете указать представление заголовка для каждого раздела с некоторой логикой внутри метода. TableViews построены с учетом разделов. У вас всегда есть разделы, если нет, то это будет раздел 0. Нет способа указать представление заголовка без указания раздела.
Бадр