Как «прикрепить» подпредставление UIScrollView к верху / низу при прокрутке? - PullRequest
2 голосов
/ 21 июля 2011

Вы видите это в приложениях для iPhone, таких как Gilt. Пользователь прокручивает представление, и подпредставление явно «прилипает» к одному краю, а остальная часть scrollView скользит внизу. То есть в scrollView есть текстовое поле (или что-то еще), которое, когда scrollView достигает верхней части представления, затем «прилипает» туда, а остальная часть представления продолжает скользить.

Итак, есть несколько вопросов. Во-первых, можно определить с помощью «scrollViewDidScroll:» (во время обычной прокрутки), когда представление интереса проходит (или вновь появляется). Здесь есть большая степень детализации - различия между вызовами делегатов могут составлять сотни и более пунктов. Тем не менее, когда вы видите, что представление приближается к вершине scrollView, вы включаете вторую копию представления, статически отображаемого под вершиной scrollView. Я не кодировал это, но, похоже, у него не будет реального вида «палки» - вид сначала исчезнет, ​​а затем снова появится.

Во-вторых, если кто-то делает setContentOffset: animated, он не получает сообщения делегата (Gilt этого не делает). Итак, как вы получаете обратные вызовы в этом случае? Используете ли вы KVO для "scroll.layer.presentationLayer.bounds"?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Ну, я нашел один способ сделать это.Когда пользователь прокручивает, перетаскивая и перетаскивая, UIScrollView выдает своему делегату сообщение «scrollViewDidScroll:».Затем вы можете посмотреть, переместил ли скроллер содержимое в нужное вам место.

При «налипании» представления удалите его из scrollView, а затем добавьте в суперпредставление scrollView (с происхождением 0,0).При отклеивании делайте обратное.

Если вы используете UIScrollView setContentOffset: animated:, это становится сложнее.Я подкласс UIScrollView, использовал флаг, чтобы указать, что setContentOffset перемещает смещение, а затем запустил быстродействующий таймер для отслеживания contentOffset.

Я поместил метод, который обрабатывает математику и вставляет / снимает раскладку дочернегопосмотреть на этот подкласс.Это выглядит довольно хорошо.

0 голосов
/ 13 февраля 2013

Gilt использует табличное представление для достижения этой цели. В частности, в делегате табличного представления используются следующие два метода:

- просмотр таблицы: viewForHeaderInSection: и - tableView: heightForHeaderInSection:

...