Ich habe meine Einschränkungen in viewDidLoad
/loadView
eingerichtet (ich bin auf iOS> = 6). updateViewConstraints
ist nützlich zum Ändern von Werten von Beschränkungen, z.B. Wenn eine Abhängigkeit von der Ausrichtung des Bildschirms abhängig ist (ich weiß, es ist eine schlechte Übung), können Sie in dieser Methode ihre constant
ändern.
Hinzufügen von Einschränkungen in viewDidLoad
wird während der Sitzung "Einführung in Auto-Layout für iOS und OS X" (WWDC 2012), ab 39:22 gezeigt. Ich denke, es ist eines der Dinge, die während der Vorlesungen gesagt werden, aber nicht in der Dokumentation landen.
UPDATE: ich die Erwähnung der Einrichtung Einschränkungen in Resource Management in View Controllers bemerkt haben:
Wenn Sie es vorziehen erstellen Ansichten programmatisch, anstatt mit einem Storyboard, tun Sie dies durch zwingende Ihre Ansicht Controller loadView
Methode. Ihre Implementierung dieser Methode sollte wie folgt vorgehen:
(...)
3. Wenn Sie Auto-Layout verwenden, assign ausreichend Einschränkungen jeweils die Ansichten, die Sie nur die Position geschaffen zu steuern und Größe Ihrer Ansichten. Andernfalls implementieren Sie die Methoden viewWillLayoutSubviews
und viewDidLayoutSubviews
, um die Frames der Unteransichten in der Ansichtshierarchie anzupassen. Siehe „Ändern der Größe, die Ansichten des View-Controller.“
UPDATE 2: Während der WWDC 2015 Apple gave a new explanation von updateConstraints
und updateViewConstraints
Verwendung empfohlen:
Wirklich, das alles ist ein Weg für Ansichten ein haben Chance, rechtzeitig Änderungen für den nächsten Layout-Durchlauf vorzunehmen, aber es wird oft nicht benötigt.
All Ihre anfängliche Constraint-Einrichtung sollte idealerweise im Interface Builder erfolgen.
Oder wenn Sie wirklich finden, dass Sie Ihre Einschränkungen programmgesteuert zuordnen müssen, ist ein Ort wie viewDidLoad viel besser.
Update-Einschränkungen sind nur für die Arbeit, die regelmäßig wiederholt werden muss.
Es ist auch ziemlich einfach, Einschränkungen zu ändern, wenn Sie die Notwendigkeit dazu finden; Wenn Sie diese Logik jedoch von dem anderen Code, der damit in Beziehung steht, entfernen und ihn in eine separate Methode verschieben, die zu einem späteren Zeitpunkt ausgeführt wird, wird es viel schwieriger, Ihrem Code zu folgen. Daher wird es schwieriger für Sie, ihn zu pflegen Es wird für andere Menschen viel schwieriger sein zu verstehen.
Also, wann müssten Sie Update-Einschränkungen verwenden?
Nun, es läuft auf die Leistung.
Wenn Sie feststellen, dass das Ändern nur der Constraints zu langsam ist, können Ihnen Update-Constraints helfen.
Es stellt sich heraus, dass das Ändern einer Integritätsbedingung in Aktualisierungsbedingungen tatsächlich schneller ist als das Ändern einer Integritätsbedingung zu anderen Zeitpunkten.
Der Grund dafür ist, dass die Engine in der Lage ist, alle in diesem Durchlauf auftretenden Constraint-Änderungen als Batch zu behandeln.
ich die gleiche Erfahrung mit updateViewConstraints gehabt haben, so Ich habe aufgehört zu versuchen, es zu benutzen. Ich konfiguriere Constraints in ViewDidLoad oder in der Methode updateConstraints einer benutzerdefinierten Ansicht. Hoffentlich gibt dir jemand eine definitive Antwort. – bilobatum
'updateViewConstraints': * Sie können diese Methode in einer Unterklasse überschreiben, um der Ansicht oder ihren Unteransichten Einschränkungen hinzuzufügen. * (Aus den [Apple-Dokumenten] (https://developer.apple.com/library/ios/documentation /Uikit/reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/updateViewConstraints)) – testing