UIView Frames werden zurückgesetzt, wenn das automatische Layout verwendet wird

8

Ich stehe vor einem Problem. Ich arbeite an einer App und verwende storyboard mit Autolayout aktiviert. Jetzt auf einer meiner UIViewControllers habe ich eine UIView (sagen wir A) platziert. Jetzt hat A mehrere Unteransichten ( UIViews , um genau zu sein). Ich habe die Einschränkung " Horizontally and Vertically centered " für A angewendet. Die Unteransichten in A haben keine Einschränkungen für sie.

Jetzt in meinem Code habe ich eine Methode, um die Subviews zu animieren, die in A sind. Innerhalb dieser Methode rufe ich die UIView's -Animationsmethode ...

auf %Vor%

und animiere eines der Teilansichten innerhalb der Ansicht A. Nun besteht das Problem, dass diese Rahmenänderungen nicht bestehen bleiben. Wenn ich einen View-Controller auf dem aktuellen View-Controller modale und ihn dann verwerfe, werden die Frames aller Subviews innerhalb von A zurückgesetzt.

Ich habe danach gesucht und herausgefunden, dass das Problem wegen Autolayout auftritt. Ich habe es deaktiviert und dann erneut versucht und alles hat gut funktioniert.

Aber was ist die Problemumgehung mit Autolayout aktiviert ...?

Vermisse ich etwas ...?

Das Interessante ist, dass viele Posts auf StackOverflow dies vorgeschlagen haben

  

sollten wir die Beschränkungen und NICHT die Rahmen bei der Verwendung von automatischem Layout animieren.

ABER ich habe keine Einschränkungen für die Teilansichten angewendet, die sich in Ansicht A befinden. Einschränkungen werden nur für Ansicht A angewendet.

Danke.

    
Assad Javed Karim 21.01.2014, 09:47
quelle

3 Antworten

17

Schreiben Sie für alle Ansichten, die Sie animieren, den folgenden Code in viewDidLoad

%Vor%

Hoffe das hilft

    
Rohan Bhale 21.01.2014 10:11
quelle
3

Der Grund dafür ist, dass Autolayout die Ansichten an ihre ursprüngliche Position aktualisiert. Das Autolayout-System legt die Position und Größe jeder Ansicht in Ihrer Ansichtshierarchie basierend auf den Layoutbeschränkungen regelmäßig fest.

    
6rod9 12.03.2014 13:48
quelle
0

Fügen Sie Folgendes hinzu:

%Vor%

Durch das Einfügen in viewDidLayoutSubviews anstelle von viewDidLoad wurden die Layout-Constraint-Fehler für mich beseitigt.

    
geometrikal 22.08.2015 02:36
quelle