iOS - viewDidLayoutSubviews wurde aufgerufen, bevor das automatische Layout auf iOS7 abgeschlossen wurde

8

Wir haben derzeit ein Problem, das anscheinend nur iOS7-Geräte betrifft.

Innerhalb unserer .xib-Datei haben wir zwei Ansichten innerhalb einer Containeransicht (d. h. nicht auf der obersten Ebene der Ansichtshierarchie), die bei der Anzeige kreisförmig sein müssen. Die Ansichten haben Beschränkungen, die auf ihre Position und ihren horizontalen Abstand innerhalb des Containers angewendet werden, und eine Seitenverhältnisbedingung, die sie erfordert, sind quadratisch. Die Ansichten sollten auf größeren Bildschirmgrößen in Breite und Höhe erweitert werden, wobei die beschriebenen Einschränkungen zu beachten sind.

In unserer VC haben wir in viewDidLayoutSubviews Folgendes, um zu bewirken, dass diese Ansichten zirkulär erscheinen:

%Vor%

Dies scheint auf iOS8 gut zu funktionieren, aber auf iOS7 gibt es einen Zeitraum, nachdem die Ansicht angezeigt wurde, wo die Einschränkungen noch nicht angewendet wurden und die Größe der Ansicht / Ansichten falsch ist (siehe beigefügte Screenshots). Dies löst sich selbst auf und gibt einen Kreis nach einer halben Sekunde korrekt wieder. Dies scheint nur dann der Fall zu sein, wenn die Ansichten, die kreisförmig sein sollen, NICHT auf der obersten Ebene der Ansichtshierarchie der VC liegen, was bedeutet, dass viewDidLayoutSubviews aufgerufen wird, bevor auch die Teilansichten von Teilansichten angelegt wurden.

Meine Vermutung ist, dass wir dieses Problem potenziell beheben könnten, indem wir UIView für den verschachtelten Container untergliedern, indem wir Referenzen zur kreisförmigen Ansicht innerhalb dieser Unterklasse hinzufügen und viewDidLayoutSubviews hier überschreiben, um die cornerRadius-Anpassung vorzunehmen. Dies scheint jedoch eine Art Problemumgehung zu sein und ich bin daran interessiert zu sehen, ob es andere Optionen gibt.

Gibt es eine sauberere / idiomatische Lösung für dieses Problem?

    
jmc 29.01.2015, 00:50
quelle

1 Antwort

1

Ich weiß, das ist eine alte Frage, aber hast du versucht, eines der folgenden Dinge anzurufen:

%Vor%

oder:

%Vor%     
SunburstEnzo 12.01.2016 20:47
quelle

Tags und Links