Der UIScrollView-Frame hat eine andere Größe für iOS 8 und iOS 7

7

Ich habe einen View-Controller implementiert, der einfach ein einzelnes Bild anzeigt und dem Benutzer ermöglicht, das Bild zu vergrößern oder zu schwenken. Es funktioniert gut auf iOS 7, aber auf iOS 8 hat der Rahmen der Bildlaufansicht eine andere Größe und das Endergebnis ist, dass das Bild auf dem iPhone zu weit herangezoomt und auf dem iPad bei iOS 8 zu weit herausgezoomt wurde. Dies liegt daran Die Breite des Bildlauffensters beträgt 600pt, was der Größe im Storyboard entspricht (Universal Storyboard mit Größenklassen). Aber ich habe automatische Layout-Einschränkungen, die sicherstellen sollen, dass die Scroll-Ansicht sich dehnt, um den verfügbaren Platz zu füllen - es sollte 768pt auf dem iPad sein. Dies ist bei iOS 7 der Fall, nicht jedoch bei iOS 8.

Dies ist das Setup: Im Interface Builder habe ich ein UIViewController , das ein UIView enthält, das ein UIScrollView mit automatischem Layout enthält, das den Nachspann, den führenden, den unteren und den oberen Raum an die Superansicht bindet. Dann in viewDidLoad :

%Vor%

Ich habe festgestellt, dass, wenn ich dieselbe NSLog in viewDidAppear anlege, die Breite des Rahmens korrekt 768pt ist. Ich habe versucht, diesen Code in viewWillAppear anstelle von viewDidLoad zu verschieben, aber ich bekomme das gleiche Ergebnis - es ist auch 600 in viewWillAppear . Daher wird die Bildlaufansicht richtig gestreckt, um die Anzeige zu füllen, aber nicht bevor sie auf dem Bildschirm erscheint. Ich benötige die korrekte Bildgröße, bevor das Bild auf dem Bildschirm erscheint, damit ich die korrekten minimalen und maximalen Zoomwerte berechnen kann.

Was kann ich tun, um das zu beheben und sicherzustellen, dass es für iOS 7 und 8 funktioniert?

    
Joey 23.10.2014, 16:51
quelle

2 Antworten

22

Ich habe es gelöst. Aus irgendeinem Grund ist viewDidLoad zu früh im Lebenszyklus, um den angepassten Frame der Bildlaufansicht auf iOS 8 zu erhalten, aber wiederum funktioniert es auf iOS 7. viewWillAppear ist auch zu früh, ebenso wie viewWillLayoutSubviews .

Um das Problem zu lösen, habe ich einfach den Code dorthin verschoben, wo ich die Bildgröße der Bildansicht auf viewDidLayoutSubviews einstellen muss, die schließlich die richtige Größe erhält, wenn sie erscheint.

    
Joey 23.10.2014, 17:29
quelle
1

Ich hatte auch viel mit einem ähnlichen Problem zu kämpfen. Ich habe es gelöst, indem ich die Breite der contentView im scrollview programmatisch änderte. In ViewDidLoad rufe ich diese Methode auf

%Vor%     
Ibrahim Yildirim 28.03.2015 15:07
quelle