2013-12-13 3 views
11

UIView ‚s updateConstraints Methode hat eine Notiz:Mit welchen Operationen werden Einschränkungen aufgehoben?

Sie müssen keine Einschränkungen als Teil Ihrer Einschränkung Aktualisierungsphase ungültig machen. Sie dürfen auch keine Layout- oder Zeichenphase als Teil der Constraint-Aktualisierung aufrufen.

Es ist mir nicht klar, was Einschränkungen ungültig machen würde.

Antwort

7

Durch einige Experimente habe ich festgestellt, dass einfach hinzufügen, entfernen oder bearbeiten Einschränkungen nicht automatisch setNeedsUpdateConstraints aufgerufen werden. In der Tat kann ich keinen Weg finden, um setNeedsUpdateConstraints automatisch vom System aufgerufen zu bekommen. Zusammen mit meiner Beobachtung, dass updateConstraints wird nicht ohne setNeedsUpdateConstraints oder invalidateIntrinsicContentSize aufgerufen wird zuerst aufgerufen, ich denke, die einzige sinnvolle Möglichkeit, alle Einschränkungen ungültig ist durch den Aufruf setNeedsUpdateConstraints oder invalidateIntrinsicContentSize mich.So ist die Implikation der Note in der Frage Post ist:

Sie nicht [self setNeedsUpdateConstraints] oder [self invalidateIntrinsicContentSize] in updateConstraints nennen müssen.

+1

angegeben, das ist der Zweck von setNeedsUpdateConstraints. Es ist keine vom System aufgerufene Methode. Es ist eine Methode, die dem Programmierer zur Verfügung gestellt wird, um der Auto-Layout-Laufzeit mitzuteilen, dass Einschränkungen aktualisiert werden müssen. Die Runtime wird dies dann zur richtigen Zeit tun. Es wird bereitgestellt, da Sie updateConstraints nicht direkt aufrufen sollten. –

1

Ausgezeichnete Frage!

Richard Warren deckt dies in seinem Blog Tutorial UNDERSTANDING AUTO LAYOUT:

Wenn wir eine Ansicht, die Zwänge entkräften wollen, sollten wir die alten Einschränkungen entfernen, dann setNeedsUpdateConstraints nennen. Unsere benutzerdefinierten Methoden updateConstraints oder updateViewConstraints können dann die neuen Integritätsbedingungen bereitstellen.

Einschränkungen sollten nicht in der updateConstraints Methode ungültig werden. Dies wird ausdrücklich in der UIView Class Reference angegeben:

Benutzerdefinierte Ansichten, die Einschränkungen einrichten selbst sollten durch Überschreiben dieser Methode so tun. Wenn Ihre benutzerdefinierte Ansicht feststellt, dass eine Änderung an der Ansicht vorgenommen wurde, die eine ihrer Integritätsbedingungen ungültig macht, sollte sie sofort diese Einschränkung entfernen und dann setNeedsUpdateConstraints aufrufen, um zu beachten, dass Abhängigkeiten aktualisiert werden müssen. Bevor das Layout ausgeführt wird, wird Ihre Implementierung von updateConstraints aufgerufen, sodass Sie überprüfen können, ob alle erforderlichen Einschränkungen für Ihren Inhalt zu einem Zeitpunkt bestehen, zu dem sich die Eigenschaften der benutzerdefinierten Ansicht nicht ändern.

Sie dürfen keine Einschränkungen als Teil Ihrer Einschränkung ungültig machen Update-Phase. Sie können auch keine Layout- oder Zeichenphase als Teil der Constraint-Aktualisierung aufrufen.

Dies unterscheidet sich von der View Controller-Entsprechung updateViewConstraints. Es gibt keine ähnliche Bedingung, um Beschränkungen in dieser Methode nicht zu entkräften. Sicher, Erica Sadun'sbook zeigt Beispielcode, der genau das tut.

+3

'updateConstraints' ist zum Aktualisieren von Einschränkungen, richtig? Ist das Entfernen von Constraints keine Art von Constraints? Darf ich Einschränkungen in 'updateConstraints' entfernen? – an0

+0

hinzugefügt, um mit Apples Richtlinien zu antworten, wie in UIView docs oben –

Verwandte Themen