iPhone - Вложение UIScrollViews для горизонтальной подкачки и вертикальной прокрутки - PullRequest
11 голосов
/ 12 июля 2010

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

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

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

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

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

Ответы [ 4 ]

9 голосов
/ 15 июля 2010

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

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

0 голосов
/ 29 апреля 2018

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

0 голосов
/ 20 августа 2013

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

parentScrollView.contentSize = CGSizeMake(parentScrollView.contentSize.width, desiredContentHeight);
nestedScrollView.contentSize = CGSizeMake(nestedScrollView.frame.size.width, desiredContentHeight);
0 голосов
/ 14 августа 2011

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

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

...