У меня есть UITableView с двумя разделами. Это простой вид таблицы. Я использую viewForHeaderInSection для создания пользовательских представлений для этих заголовков. Все идет нормально.
Режим прокрутки по умолчанию заключается в том, что при обнаружении раздела заголовок раздела остается закрепленным под панелью навигации до тех пор, пока не отобразится следующий раздел.
У меня такой вопрос: могу ли я изменить поведение по умолчанию, чтобы заголовки разделов НЕ оставались на якоре сверху, а прокручивались под панелью навигации с остальными строками разделов?
Я что-то упускаю из виду?
Спасибо.
ios
iphone
uitableview
cocoa-touch
davidjhinson
источник
источник
Ответы:
Я решил эту проблему, чтобы отрегулировать в
contentOffset
соответствии сcontentInset
вUITableViewControllerDelegate
(распространяетсяUIScrollViewDelegate
) , как это:Единственная проблема здесь заключается в том, что при прокрутке назад к вершине он немного теряет отскок.
{ПРИМЕЧАНИЕ: «40» должно быть точной высотой ВАШЕГО заголовка секции 0. Если вы используете число, которое больше, чем высота заголовка раздела 0, вы увидите, что это влияет на ощущение пальца (попробуйте как «1000», и вы увидите, что поведение отскока вверху странно). если число соответствует высоте заголовка раздела 0, ощущение пальца кажется либо идеальным, либо почти идеальным.}
источник
Вы также можете добавить раздел с нулями строк в верхней части и просто использовать нижний колонтитул предыдущего раздела в качестве заголовка для следующего.
источник
Если бы я делал это, я бы воспользовался тем, что UITableViews в стиле Plain имеют липкие заголовки, а заголовки в стиле Grouped - нет. Я бы, по крайней мере, попытался бы использовать пользовательскую ячейку таблицы, чтобы имитировать появление простых ячеек в сгруппированной таблице.
Я на самом деле не пробовал это, так что это может не сработать, но это то, что я бы предложил сделать.
источник
tableView.separatorColor = [UIColor clearColor];
для имитации простого табличного представления.Я знаю, что это поздно, но я нашел окончательное решение!
Что вы хотите сделать, если у вас есть 10 разделов, пусть dataSource возвращает 20. Используйте четные числа для заголовков разделов и нечетные числа для содержимого разделов. что-то вроде этого
Вуаля! : D
источник
UITableView
которые я использую.Есть несколько вещей, которые нужно сделать, чтобы решить эту проблему не хакерским способом:
UITableViewStyleGrouped
backgroundColor
на[UIColor clearColor]
backgroundView
каждой ячейки табличного представления пустое представление с помощьюbackgroundColor [UIColor clearColor]
rowHeight
соответствующим образом или переопределите,tableView:heightForRowAtIndexPath:
если отдельные строки имеют разную высоту.источник
UITableViewStyleGrouped
ячейки таблицы имеют дополнительные поля, которые изменяют их выравнивание с заголовком. Это проблема, когда вы действительно хотите изобразить таблицу из нескольких столбцов и использовать заголовок для отображения заголовков столбцов (а затем выровнять отдельные записи таблицы с этими заголовками).Первоначально опубликовано здесь , быстрое решение с использованием IB. То же самое можно сделать программно, хотя и довольно просто.
Некоторые люди говорили, что это решение скрывает первый заголовок, однако я не заметил такой проблемы. Это отлично сработало для меня и было самым простым решением, которое я видел до сих пор.
источник
Я не был доволен решениями, описанными здесь до сих пор, поэтому я попытался объединить их. В результате получается следующий код, вдохновленный @awulf и @cescofry. Это работает для меня, потому что у меня нет реального заголовка табличного представления. Если у вас уже есть заголовок табличного представления, возможно, вам придется настроить высоту.
источник
Просто измените стиль TableView:
UITableViewStyle Документация :
источник
Выберите стиль сгруппированного табличного представления в Инспекторе атрибутов вашего tableView в раскадровке.
источник
Установите заголовок таблицы с прозрачным видом с той же высотой заголовка в разрезе. Также инициируйте просмотр таблицы с помощью y-frame в -height.
источник
Я нашел альтернативное решение, используйте первую ячейку каждого раздела вместо реального раздела заголовка, это решение не выглядит таким чистым, но работает настолько хорошо, что вы можете использовать определенную ячейку прототипа для раздела заголовков и в методе cellForRowAtIndexPath запросите indexPath.row == 0, если true, используйте ячейку прототипа раздела заголовка, иначе используйте вашу ячейку прототипа по умолчанию.
источник
indexPath.row
&indexPath.section
, убедитесь, что вы возвращаете высоту0.0f
для,- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
чтобы ваши заголовки были невидимы.Измените ваш стиль TableView:
Согласно документации Apple для UITableView:
источник
Теперь, когда сгруппированный стиль выглядит в основном так же, как простой стиль в iOS 7 (с точки зрения плоскостности и фона), для нас самым лучшим и простым (т.е. наименее хакерским) решением было просто изменить стиль табличного представления на сгруппированный. Поддавливание с помощью contentInsets всегда было проблемой, когда мы интегрировали прокручиваемую навигационную панель вверху. При использовании стиля сгруппированного табличного представления он выглядит одинаково (с нашими ячейками), а заголовки разделов остаются неизменными. Нет странностей прокрутки.
источник
Назначьте отрицательную вставку для вашего tableView. Если у вас есть заголовки секций высотой 22px, и вы не хотите, чтобы они были липкими, сразу после перезагрузки Data add:
Работает как шарм для меня. Работает и для нижних колонтитулов, просто назначьте отрицательную вставку внизу.
источник
Я добавляю таблицу в представление прокрутки, и это, кажется, работает хорошо.
источник
Проверьте мой ответ здесь . Это самый простой способ реализовать заголовки не плавающих разделов без каких-либо взломов.
источник
Ответ @ LocoMike лучше всего подходил для моего tableView, однако он сломался и при использовании нижних колонтитулов. Итак, это исправленное решение при использовании верхних и нижних колонтитулов:
источник
Swift версия ответа @awulf, которая прекрасно работает!
источник
Я узнал, что просто установка свойства tableHeaderView делает это, то есть:
и это все.
источник