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
:
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?
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.
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
Tags und Links ios autolayout uiimageview ios8 uiscrollview