2010-07-12 5 views
11

Ich entwickle meine erste iPhone App und würde mich sehr über den Input Ihres Lesers für ein Problem freuen, das ich habe.iPhone - Nesting UIScrollViews für horizontales Paging und vertikales Scrollen

Ich suche Scrolling sowohl horizontal als auch vertikal zu implementieren. Ich möchte, dass das horizontale Scrollen ausgelagert wird, ohne dass das vertikale Scrollen durchgeführt wird (Scrollen "normal"). Eine einzelne UIScrollView mit pagingEnabled auf YES wird in beide Richtungen angezeigt. Die natürliche Lösung wäre, ein UIScrollView in ein anderes zu verschachteln, aber wenn ich das mache, kann ich das "innere" UIScrollView überhaupt nicht scrollen. Scheint die äußere besteht alle tap Ereignisse „Essen“, wie in:

UIScrollView : paging horizontally, scrolling vertically?

ich etwas über „innere Scrollen“ lesen auf 3.0 in SDK verbessert und tatsächlich, wenn ich hinzufügen, eine innere UITableView statt Ein UIScrollView funktioniert einwandfrei. Seit UITableView Unterklassen UIScrollView stelle ich mir vor, dass mein gewünschtes Verhalten erreichbar sein sollte, indem ich meine eigene Unterklasse von UIScrollView mache.

Ist das der richtige Ansatz? Wenn ja, wie sollte diese Unterklasse aussehen?

Antwort

9

Dies funktioniert jetzt sofort mit dem SDK. Informationen zum Implementieren des ausgelagerten horizontalen Scrollens mit einem View-Controller für jede Seite finden Sie unter Scrolling Madness und Apple's UIPageControl sample.

Die verschachtelten UIScrollViews, die Sie als Unterviews zu Ihrer äußeren UIScrollView hinzufügen, sollten die gleichen Rahmenhöhen wie der Container haben. Wenn Sie dies tun, wird die äußere UIScrollView die vertikalen Scroll-Ereignisse zur Unteransicht durchlaufen. Meine App hat drei Ebenen von UIScrollView und UIWebView Verschachtelung und ich habe gefunden Cocoa ist wirklich intelligent über die Weitergabe der Ereignisse an die ich möchte, solange ich meine Rahmengrößen so einstellen, dass nur eine Ansicht wirklich scrollbar ist (contentSize> frame) jede Achse.

+0

Vielen Dank dafür. Dies funktioniert in der Tat out of the box.Ich glaube, dass die Top-Level-Ansicht Ihrer vertikalen Scroll-Seiten ein UIScrollView sein muss. Anfangs hatte ich meinen vertikalen Scroller unter einer UIView und dies funktionierte nicht wie gewünscht. Denken Sie auch daran, die contentSize Ihrer vertikalen Scroller einzustellen. – user621267

0

Ich habe mit diesem großen lib von Andrey Tarantsov für Monate: SoloComponents

Sie es als eine „horizontale UITableView“ verwenden kann, mit Unterstützung für die Paginierung und das Recycling. Gut gemacht und perfekt im Kakao-Stil gestaltet.

0

Basierend auf Dylans Antwort musste ich in meinem Fall auch Inhaltshöhen sowohl für die übergeordneten als auch für die verschachtelten UIScrollViews gleichsetzen, damit UIScrollView verschachtelt wird, um vertikal zu scrollen. "Nur die gleichen Rahmenhöhen wie der Container" zu machen, wie Dylan erklärte, war nicht genug:

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