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