IPhone - Вложение UIScrollViews для горизонтальной подкачки и вертикальной прокрутки

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

Я ищу для выполнения прокрутки как по горизонтали, так и по вертикали. Я хочу, чтобы горизонтальная прокрутка была выгружена, без вертикальной выгрузки (прокрутка "обычно" ). Единый UIScrollView с pagingEnabled, установленным в YES, будет отображаться в обоих направлениях. Естественным решением было бы вложить UIScrollView внутри другого, но когда я это сделаю, я не могу заставить "внутренний" UIScrollView прокручиваться вообще. Кажется, что внешний "ест" все события крана, например, в:

UIScrollView: подкачка по горизонтали, прокрутка по вертикали?

Я прочитал что-то о "внутренней прокрутке", улучшенном в SDK 3.0, и фактически, когда я добавляю внутренний UITableView вместо UIScrollView, прокрутка работает безупречно. Поскольку UITableView подклассы UIScrollView я представляю себе, что мое желаемое поведение должно быть достижимо, создав собственный подкласс UIScrollView.

Это правильный подход? Если да, то каким должен выглядеть этот подкласс?

Ответ 1

Теперь это работает с SDK. См. Прокрутка безумия и образец Apple UIPageControl для руководства по реализуйте прокручиваемую горизонтальную прокрутку с контроллером вида для каждой страницы.

Вложенные UIScrollViews, которые вы добавляете в качестве подзаголовков в внешний UIScrollView, должны иметь одинаковые высоты кадров, чем контейнер. Если вы сделаете это, внешний UIScrollView пройдет через события вертикальной прокрутки в подвью. Мое приложение имеет три уровня вложения UIScrollView и UIWebView, и я обнаружил, что Cocoa действительно разумно передавать события в тот, который я хочу, до тех пор, пока я устанавливаю размеры фрейма, так что только одно представление действительно прокручивается (contentSize > frame ) на каждой оси.

Ответ 2

Я использую этот большой lib Андреем Таранцовым в течение нескольких месяцев: SoloComponents

Вы можете использовать его как "горизонтальный UITableView" с поддержкой разбивки на страницы и просмотра вторсырья. Хорошо выполненный и отлично разработанный cocoa.

Ответ 3

Основываясь на ответе Дилана, в моем случае я также должен был сделать высоту размера контента равным как для родительского, так и для вложенного UIScrollViews, чтобы сделать вложенный UIScrollView прокруткой по вертикали. Выполнение только "тех же высот кадра, что и контейнер", как объяснил Дилан, было недостаточно:

parentScrollView.contentSize = CGSizeMake(parentScrollView.contentSize.width, desiredContentHeight);
nestedScrollView.contentSize = CGSizeMake(nestedScrollView.frame.size.width, desiredContentHeight);

Ответ 4

Что говорит Дилан. И, возможно, представляет интерес для этой темы - вам не нужно включать прокрутку в главном "пейджинговом" UIScrollView, просто включить пейджинг и блокировку направления. Похоже, это гарантирует, что все сигналы вертикальной прокрутки переходят во вложенные NSScrollViews фиксированного размера с вертикальной прокруткой. Это работает как минимум до iOS 9.

Ответ 5

Если вы пытаетесь что-то наподобие пользовательского интерфейса профиля Twitter, я достиг этого, поместив представление заголовка и нижнюю прокрутку в родительский просмотр прокрутки и наложив на него еще одну прокрутку.

Подложка прокрутки отвечает за корректировку смещения содержимого заголовка и низа. Размер его содержимого также регулируется высотой внутреннего элемента.

Это выглядит сложно, когда я говорю, лучше посмотреть кодhttps://github.com/OfTheWolf/Twitterprofile