8 Stimmen

Wie kann ich eine UIScrollView innerhalb einer UIScrollView verschachteln, so dass der Benutzer die innere UIScrollView scrollen kann?

Ich habe das noch nicht ausprobiert, aber ich nehme an, dass ich das Blättern in der übergeordneten Bildlaufansicht deaktivieren muss, sobald ich weiß, dass der Benutzer in der untergeordneten Bildlaufansicht blättern möchte, richtig?

Beide Bildlaufansichten führen einen horizontalen Bildlauf durch.

Wie kann ich die Bildlauferkennung des übergeordneten Elements vorübergehend deaktivieren? Oder gibt es eine andere Möglichkeit?

9voto

hatfinch Punkte 3065

UIScrollView hat eine Eigenschaft namens scrollEnabled die Sie einstellen können auf NO um den Bildlauf in der übergeordneten Bildlaufansicht zu deaktivieren.

Ich habe es noch nicht ausprobiert, aber vielleicht finden Sie heraus, dass es das Richtige tut, d.h. die innere Bildlaufansicht scrollt, bis sie nicht mehr scrollen kann, woraufhin die äußere Bildlaufansicht scrollt.

0 Stimmen

Hi hatfinch, ich frage mich, wie ich das Standardverhalten "die innere Scrollansicht scrollt, bis sie nicht mehr scrollen kann, woraufhin die äußere Scrollansicht scrollt" verhindern kann? Ich wünschte, wenn der Benutzer die innere Ansicht scrollt, könnte die äußere Ansicht bleiben, auch wenn die innere Ansicht bis zum Ende gescrollt hat.

0 Stimmen

Sie könnten sich für Delegate-Callbacks auf der inneren Bildlaufansicht registrieren und den Bildlauf auf der äußeren Bildlaufansicht deaktivieren, wenn die innere mit dem Bildlauf beginnt, und ihn wieder aktivieren, wenn die innere mit der Verlangsamung fertig ist.

2voto

BrianDotNet Punkte 56

Das ist durchaus möglich. Der einfachste Weg ist die Deaktivierung des scrollEnabled Eigenschaft, können Sie auch versuchen, die äußere UIScrollView 's contentSize auf seine Grenzen, so dass es nicht rollt. Je nachdem, was Sie brauchen, können Sie No auf bounce als auch, aber das wird im Grunde machen Sie Ihre Scroll-Ansicht wie eine normale UIView.

Wenn Sie die Kontrolle über alle Kinder haben UIScrollView können Sie implementieren UIScrollViewDelegate Protokoll, aber wenn Sie das nicht tun oder Ihr Kind UIScrollView ist eigentlich ein UITableView o UICollectionView dann kann man sich nicht wirklich auf die UIScrollViewDelegate Protokoll, aber denken Sie daran UIScrollView kommt mit einem panGestureRecognizer und Sie können damit spielen. Eine leistungsfähige, aber schwerfällige Methode ist das Hinzufügen eines Beobachters auf der panGestureRecognizer 's state Eigenschaft, so dass Sie alle Ereignisse erfassen können, ohne der Delegierte der UIScrollView in Frage.

0voto

Franky Punkte 1

Ich habe dies getan und es bewirkt, dass die übergeordnete scrollView nicht mehr scrollen, was in Ordnung ist sondern mein Kind scrollView, die über presentModalViewController geschoben wurde immer noch nicht reagieren auf Scroll-Ereignisse (z. B. nach oben oder unten scrollen). Ich bin offensichtlich etwas übersehen...

EDIT : Ich habe es endlich zum Laufen gebracht, indem ich 'scrollEnabled' in der übergeordneten Ansicht verwendet habe. Danke.

0voto

Fede Mika Punkte 2043

Ich hatte das gleiche Problem, bis ich dynamisch genug Höhe, um die contentSize des inneren ScrollView, mit gesetzt:

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,600)];

Natürlich ist dies nur ein hart kodiertes Beispiel, Sie sollten die Höhe einstellen, die benötigt wird, um den gesamten Inhalt der Ansicht anzuzeigen, und vielleicht ist am Ende kein Scrollen erforderlich.

Es scheint, dass die Einstellung der Höhe der scrollView mit dem IBuilder nicht genug ist, so dass kein Scrollen erforderlich war, und deshalb dachte ich, dass das Sweep-Ereignis die innere Rolle nicht erreichte.

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X