Es gibt sehr gute Erklärung von Auto-Layout und Rotationen in Matthijs Hollemans Post. Sie können es hier finden: http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2
Normalerweise benötigen Sie etwa 4 Einschränkungen, um Ihre Sicht richtig zu positionieren. Wenn meine Ansichten konstante Größe haben, bevorzuge ich Höhe und Breite. Danach können Sie Leading und Top Space Constraints verwenden, um zu tun, was Sie wollen. Zum Beispiel können Sie IBOutlets für führende und Top-Platzbeschränkungen für Ihre Ansichten einstellen:
@interface ViewController : UIViewController {
IBOutlet NSLayoutConstraint *_leadingSpaceConstraint;
IBOutlet NSLayoutConstraint *_topSpaceConstraint;
}
Dann steuern Ziehen aus der Steckdose zu Ihrer Einschränkung. Jetzt können Sie direkt Ihre Ansicht Einschränkung von Code ändern:
_leadingSpaceConstraint.constant = NEW_CONSTRAINT_VALUE;
Um die Änderungen verpflichten Sie rufen müssen:
[self.view layoutIfNeeded];
Und wenn Sie es tun wollen animiert:
[UIView animateWithDuration:0.25
animations:^{
[self.view layoutIfNeeded];
}];
Ich denke, es wird in willAnateRotationToInterfaceOrientation funktionieren, weil Sie keine Einschränkungen mit diesem Ansatz brechen müssen.
Einige Beispiele: Sie haben zwei quadratische Ansichten im Hochformat, eine unter der anderen. Setzen Sie ihre Beschränkungen für "Leading Space to Superview" beispielsweise auf 20. Setzen Sie dann für die erste Ansicht "Obergrenze für Superview-Einschränkung" auf 20 und für Sekunde auf 120. Es wird unser Standard-Setup sein.
Dann müssen Sie nach der Rotation Ihre Einschränkungen neu berechnen. Setzen Sie nun beide oberen Einschränkungen auf 20 und die führenden Einschränkungen auf 20 bzw. 120. Dann commit Änderungen mit layoutIfNeeded.
Ich hoffe, es wird helfen.
Bitte fügen Sie Ihren Code hier –
@ Makleesh: Ja, Sie haben Recht, eine Menge Probleme entstehen bei der Verwendung von Auto-Layout, aber ich finde sie ziemlich handlich .. sowieso, sieht es wird die neue Art, Dinge zu tun, besser zu bekommen hinein jetzt als spät. – vitaminwater
@Waseem: Ich habe wirklich keinen Code zum Posten ... wie gesagt, die Einschränkungen sind bereits gebrochen, bevor mein Code ausgeführt wird, also weiß ich nicht wirklich, welchen Code ich schreiben könnte! – vitaminwater