Frage

Ich habe vor verwendet UIScrollView, und nun bin mit und hatte nie ein Problem. Ich füge es jetzt zu einem alten app, und während es wie erwartet funktioniert (ich auf den Inhalt schauen kann, blättern Sie um mit dem Finger, alle Grenzen und Größen sind Setup richtig, so gibt es keinen leeren Raum im Inhalt, usw. zu arbeiten.) kann ich scrollToRectVisible einfach nicht. Ich habe sogar den Anruf vereinfacht, so dass er lediglich auf die 0,0-Position bewegt:

 [scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES];

oder auf 0200 verschieben:

 [scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES];

Ich habe sogar eine schnelle App dies zu testen, und ich kann scrollRectToVisible bekommen, dort zu arbeiten, wie ich erwarte. Aber in meiner alten app, kann ich nicht scheinen, um es etwas zu behelfen.

Ich kann die Scrollrolle mit setContentOffset: machen, aber das ist nicht das, was ich will.

Diese Scrollview und sein Inhalt werden in der Spitze von IB definiert und mit einem IBOutlet verwendet. Der einzige Code, den ich in meiner app bin mit dem Scroll zu handhaben ist

 [scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)];

(Ich bin nur daran interessiert, vertikales Scrollen nicht horizontal).

Hat jemand ein Problem wie folgt ausführen?

I verglichen haben die Scrollview-Attribute in beiden Anwendungen und sie sind identisch.

NACHTRAG:

Mein scrollViews Rahmen: 0.000000 0.000000 480.000000 179.000000

Meine scrollViews content ist: 0.000000 324.000000

Es wirkt immer noch wie die rect Ich möchte blättern ist bereits sichtbar und kein Scrollen erforderlich ist. Nicht sicher, ob das ist, was geschieht. Dies ist nur die darnest Sache. Scheint, wie eine solche einfache Sache zu lösen ...

NACHTRAG # 2:

Dies ist, wie ich mache, ohne scrollRectToVisible:

CGPoint point = myRect.origin;
if (![clefScrollView pointInside:point withEvent:nil]) {
    point.x = 0;
    if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height)
        point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height;
    [clefScrollView setContentOffset:point animated: YES];
}

Alles andere über dieses Scrollview funktioniert wie erwartet, aber scrollRectToVisible. WARUM?!? Irgendwelche wilde Vermutungen?

War es hilfreich?

Lösung

Mehr als ein Monat später, und ich dachte, es endlich heraus. Während die Alternative über gut funktioniert, war es nervt mich, und ich musste es schließlich herauszufinden. Es stellte sich heraus, dass es so etwas wie ein dummer Fehler war.

Hier ist der alte Code in meinem viewDidLoad, wo ich die Scrollview ein:

[clefScrollView setContentSize:CGSizeMake(clefScrollView.contentSize.width, clefView.frame.size.height)];

Der Wert einer Scroll Höhe oder Breite kann nicht 0 sein! Ich denke, das an mir vorbei kam, weil ich davon aus, dass Scroll Größen mit einer gültigen Größe beginnen, und mir fehlte die Tatsache, dass eine Dimension war Null!

Das funktioniert:

[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];

Hope this jemand da draußen hilft. Ich habe auf jeden Fall viel zu viel Zeit mit dem Versuch, dies zu debuggen.

Andere Tipps

Ja, ich habe nicht Erfolg mit scrollRectToVisible:animated: hatte, aber setContentOffset:animated: funktioniert immer für mich. Aus Neugier, warum wollen Sie nicht setContentOffset:animated: benutzen? Es scheint, die richtige Lösung zu sein.

Vielleicht möchten Sie überprüfen und sehen, dass die delaysContentTouches Eigenschaft Scrollview ist auf NO.

Wenn Sie die Methode scrollRectToVisible oder setContentOffset von einer Berührung innerhalb einer subview Ihrer Scroll dann rufen Sie Ihre Scroll Dinge halten durch Verzögerung berührt werden könnten.

Also, stellen Sie sicher, dass Sie Folgendes in die Scroll gesetzt.

scrollView.delaysContentTouches = NO;

Sie werden wahrscheinlich in der Lage sein, die Scrollview mit und ohne Animation Satz auf YES zu bewegen.

Ich hatte es so und es hat nicht funktioniert

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, someKnownValue);

Ich war gerade die Höhe des contentSize zu ändern, so dass ich nicht glaube, dass würde ich kein Problem, aber es hat ...

mußte es, dies zu ändern

scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue);

stellt sich heraus, ist scrollView.contentSize.width nicht unbedingt auf einen gültigen Wert gesetzt aus der sich gehen, so besser geben sie einen bestimmten Wert

Die vorgeschlagene Lösung kann die oben noch einen Fehler, wenn Sie nicht den Rahmen für die „clefScrollView“ eingestellt haben.

Wenn die Lösung oben verwendet wird, und immer noch das gleiche Problem, stellen Sie sicher, dass Sie Ihre scollView initialisiert haben (in diesem Fall clefScrollView) Rahmen vor, den Inhalt im Hinblick auf Einstellung.



    clefScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,450)];

    [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];



Ein wenig, um das Spiel zu spät, aber ich war mit dem gleichen Problem. Obwohl ich hatte meinen Scrollview ist absolut Inhaltsgröße richtig eingestellt - auch übermäßig so für den Höhenwert. Auch nach umfangreichen Prüfungen des Rahmen und Inhalt Größen zu validieren - noch funktioniert nicht. Ich hatte die „Grenzen“ Rahmenhöhe anpassen, dann alles hat super funktioniert.

hatte ich die gleichen Symptome wie diese issue..the scrollRectToVisible wurde nicht wie vorgesehen arbeiten. Mein Problem war, dass der Scrollview auf dem Storyboard ein mehrdeutige Einschränkung Problem hatte. Sobald das wurde behoben arbeitete der Anruf einfach gut. Es ist etwas anderes, um zu überprüfen, wenn der scrollRectToVisible Anruf nicht wie beabsichtigt funktioniert.

Für mich war das Problem, dass eine Einschränkung in einer Subview nicht explizit war. Überprüfen Sie, dass jede Einschränkung in Ihrem Inhalt festgelegt ist, auch wenn Sie es nicht benötigen, sind offenbar für das Layout.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top