Ich habe meine Einschränkungen in viewDidLoad
/ eingerichtet loadView
(ich ziele auf iOS> = 6 ab). updateViewConstraints
ist nützlich, um Werte von Einschränkungen zu ändern. Wenn beispielsweise eine Einschränkung von der Ausrichtung des Bildschirms abhängt (ich weiß, es ist eine schlechte Vorgehensweise), können Sie diese constant
in dieser Methode ändern .
Das Hinzufügen von Einschränkungen in viewDidLoad
wird während der Sitzung "Einführung in das automatische Layout für iOS und OS X" (WWDC 2012) ab 39:22 angezeigt. Ich denke, es ist eines der Dinge, die während der Vorlesungen gesagt werden, aber nicht in der Dokumentation landen.
UPDATE: Ich habe die Erwähnung des Einrichtens von Einschränkungen in der Ressourcenverwaltung in View Controllern bemerkt :
Wenn Sie Ansichten lieber programmgesteuert erstellen möchten, anstatt ein Storyboard zu verwenden, überschreiben Sie dazu die loadView
Methode Ihres Ansichtscontrollers . Ihre Implementierung dieser Methode sollte Folgendes tun:
(...)
3.Wenn Sie das automatische Layout verwenden, weisen Sie jeder der gerade erstellten Ansichten ausreichende Einschränkungen zu, um die Position und Größe Ihrer Ansichten zu steuern . Andernfalls implementieren Sie die Methoden viewWillLayoutSubviews
und
viewDidLayoutSubviews
, um die Frames der Unteransichten in der Ansichtshierarchie anzupassen. Siehe "Ändern der Größe der Ansichten des View Controllers".
UPDATE 2 : Während der WWDC 2015 Apple eine neue Erklärung gab von updateConstraints
und updateViewConstraints
empfohlene Verwendung:
All dies ist eine Möglichkeit für Ansichten, Änderungen an Einschränkungen rechtzeitig vor dem nächsten Layoutdurchlauf vorzunehmen, die jedoch häufig nicht benötigt werden.
Alle anfänglichen Einstellungen für Einschränkungen sollten idealerweise in Interface Builder erfolgen.
Oder wenn Sie wirklich feststellen, dass Sie Ihre Einschränkungen programmgesteuert zuweisen müssen, ist ein Ort wie viewDidLoad viel besser.
Aktualisierungsbeschränkungen gelten eigentlich nur für Arbeiten, die regelmäßig wiederholt werden müssen.
Außerdem ist es ziemlich einfach, Einschränkungen zu ändern, wenn Sie dies für erforderlich halten. Wenn Sie diese Logik von dem anderen Code, der damit zusammenhängt, trennen und in eine separate Methode verschieben, die zu einem späteren Zeitpunkt ausgeführt wird, ist es viel schwieriger, Ihrem Code zu folgen, sodass Sie ihn schwieriger pflegen können wird es für andere Menschen viel schwieriger sein zu verstehen.
Wann müssten Sie also Aktualisierungsbeschränkungen verwenden?
Nun, es läuft auf Leistung hinaus.
Wenn Sie feststellen, dass es zu langsam ist, nur Ihre Einschränkungen zu ändern, können Aktualisierungsbeschränkungen Ihnen möglicherweise helfen.
Es stellt sich heraus, dass das Ändern einer Einschränkung innerhalb von Aktualisierungsbeschränkungen tatsächlich schneller ist als das Ändern einer Einschränkung zu anderen Zeiten.
Der Grund dafür ist, dass die Engine alle in diesem Durchlauf auftretenden Einschränkungsänderungen als Stapel behandeln kann.