UIScrollView mit einem ImageView, der nicht vertikal scrollt

8

Ich habe UIImageView und es hat ein Bild größer als die Bildschirmgröße. Ich habe diese UIImageView als Unteransicht von UIScrollView . Jetzt kann ich nicht nach unten scrollen. um das ganze Bild zu sehen. Aber die Zoomfunktionen funktionieren einwandfrei.

%Vor%

    
Adam Young 24.04.2015, 11:42
quelle

9 Antworten

4

Sie müssen zwei Hauptprobleme an Ihrem UIScrollView work

lösen
  1. Ein Problem liegt darin, wo Sie alle Daten für UIScrollView initialisieren, ich meine die Funktion viewDidAppear .
  2. Sie müssen die Einschränkungen für Ihre UIScrollView wie Top , Bottom , Left und Right auf 0 setzen und Ihre SuperView respektieren.

Wenn Sie den Code innerhalb Ihres viewDidAppear innerhalb Ihrer Funktion viewDidLoad einfügen und Ihre Funktion viewDidAppear löschen, funktioniert das wie gewünscht. Wie auf folgende Weise:

%Vor%

Sie müssen auch die Einschränkungen für UIScrollView in Ihrem Storyboard festlegen

Ich habe zwar festgestellt, dass das Problem in folgendem Unterschied liegt:

  • viewDidAppear wird aufgerufen, wenn die Ansicht tatsächlich sichtbar ist, und kann während des Lebenszyklus eines View Controllers mehrmals aufgerufen werden (z. B. wenn ein Modal View Controller geschlossen und die Ansicht wieder sichtbar wird). Hier möchten Sie Layout-Aktionen ausführen oder Zeichnungen in der Benutzeroberfläche ausführen, z. B. einen Modal View-Controller präsentieren. Alles, was Sie hier tun, sollte jedoch wiederholbar sein. Es ist besser, die Dinge hier nicht zu behalten, sonst bekommt man Speicher Leaks, wenn Sie sie nicht freigeben, wenn die Ansicht verschwindet.
  • viewDidLoad wird genau einmal aufgerufen, wenn der View-Controller zum ersten Mal in den Speicher geladen wird. Hier möchten Sie Instanzvariablen instanziieren und Ansichten erstellen, die für den gesamten Lebenszyklus dieses Ansichtscontrollers gelten. Die Ansicht ist jedoch an dieser Stelle in der Regel noch nicht sichtbar.

Wenn Sie irgendein Problem haben, habe ich ein Projekt, das bereit ist, es an Github zu senden, wenn Sie es sehen wollen.

  

UPDATE :   Nach dem Test nochmal deinen Code, ich setze deinen Fehler auf weniger Code um. Ihr Code funktioniert gut, wenn Sie Ihre Zeile imageView.frame = CGRectMake(0, 0, size!.width, size!.height) einfügen, funktioniert Ihr Code ohne Einschränkungen.

In etwa so:

%Vor%

Der Schlüssel ist, dass Sie in Ihrem vorherigen Code die frame für das Bild als frame der scrollView nicht auf die Größe des Bildes setzen, die größer ist als die scrollView .

Ich hoffe, das hilft Ihnen.

    
Victor Sigler 30.04.2015 13:41
quelle
3

Stellen Sie sicher, dass Sie die Benutzerinteraktion für scrollview aktiviert haben: scrollview.userInteractionEnabled=YES

    
Sohil R. Memon 24.04.2015 11:45
quelle
2
  • nehmen Sie eine UIScrollView , fügen Sie eine UIView (sagen wir es Containeransicht) in die Scrollview ein und fügen Sie imageview in die containerView ein.

  • wendet nun die automatischen Layouteinschränkungen wie folgt auf uiscrollview an

  • wendet nun die automatischen Layout-Einschränkungen auf die containerView
  • an

  • wendet nun die automatischen Layout-Einschränkungen auf die imageView
  • an

  • Danach muss Ihre automatische Layoutstruktur wie folgt aussehen

  • Danach schreibe den folgenden Code in den ViewController.m

    %Vor%
  • Überprüfen Sie jetzt, ob die Doppeltipp- und Pinch-Geste funktioniert.

Raj 28.04.2015 09:58
quelle
1

Versuchen Sie Folgendes:

%Vor%

Oder

%Vor%

Im Allgemeinen füge ich Unteransichten in ViewDidLoad hinzu.

    
aochuih 26.04.2015 23:08
quelle
1

Stellen Sie sicher, dass die Höhe Ihrer UIScrollView nicht mehr als die Höhe der Ansicht beträgt.

Beispielcode

%Vor%

Referenz: Ссылка

    
Mohammad Nurdin 30.04.2015 02:14
quelle
1

Aktivieren Sie UIImageView userinteraction.

%Vor%     
Vineesh TP 30.04.2015 04:18
quelle
1

Um vertikal zu scrollen Sie müssen die x-Achse in der Inhaltsgröße von scrollView auf 0 setzen. und setze dies in deiner viewDidLoad Methode.

    
Faran Ghani 30.04.2015 15:08
quelle
1

Sie müssen diese Zeile auskommentieren:

%Vor%

natürlich wird es Ihnen einen Compilerfehler geben. Da der optionale Wert die Größe ist, ist der richtige Weg:

%Vor%     
Reynaldo Aguilar 30.04.2015 17:03
quelle
0

Es scrollt nicht mit Ziehen-Gesten wegen des automatischen Layouts.
In viewDidLoad setzt das automatische Layout die Inhaltsgröße zurück, nachdem Sie sie definiert haben. Sie haben zwei Möglichkeiten: Sie können das automatische Layout deaktivieren oder Sie können contentSize in viewDidLayoutSubviews festlegen.

%Vor%     
quelle