Die Frage, die ich habe, ist einfach, aber ich konnte keine Informationen in der Dokumentation finden.
Was passiert mit Layouteinschränkungen, wenn eine Ansicht aus der Ansichtshierarchie entfernt (oder in eine andere Ansicht verschoben) wird?
C
Nehmen wir zum Beispiel einen Container mit Unteransichten A
und B
. Container C
enthält einige Einschränkungen. Dann rufen wir an [A removeFromSuperview]
. Was passiert mit den Einschränkungen für A
?
Was dann passiert , wenn wir hinzufügen , A
um C
wieder?
quelle
Da ich auch diese Frage hatte, überprüfte ich die Apple Docs nur auf Tritte und es stellte sich heraus, dass dokumentiert ist, dass die Einschränkungen entfernt wurden.
In der Dokumentation zur UIView removeFromSuperview-Methode heißt es:
Ich bin mir nicht sicher, ob dies letztes Jahr dokumentiert wurde, als die ursprüngliche Frage veröffentlicht wurde, aber ich dachte nur, ich würde diese Informationen weitergeben, falls jemand sie benötigt ...
quelle
Beachten Sie jedoch, dass der Aufruf von [B addSubview: C] bei zwei unabhängigen übergeordneten Ansichten A und B und einer Unteransicht C, wobei C derzeit eine Unteransicht von A mit entsprechenden Einschränkungen ist, KEINE Einschränkungen in Bezug auf A aufhebt und C, und das automatische Layout löst Ausnahmen aus, da sich diese Einschränkungen nicht mehr auf Ansichten in derselben Hierarchie beziehen.
Sie müssen [C removeFromSuperview] explizit aufrufen, um die Einschränkungen zu entfernen, bevor Sie C zu B hinzufügen.
Dies gilt unter Mac OS X - Ich habe iOS nicht überprüft
quelle
Die Einschränkungen werden auch entfernt, wenn Sie
[A removeFromSuperview]
Sie werden vergessen und durch erneutes Hinzufügen von A zu C werden keine Einschränkungen hinzugefügt.
quelle
Sie werden ebenfalls entfernt, Sie können einen einfachen Test durchführen. Nehmen Sie eine Ansicht SUBVIEW auf und erstellen Sie Kostenbeschränkungen, die SUBVIEW dazu zwingen, die Größe der Superview zu ändern (z. B. an den Kanten der Superview angebracht). Dazu fügen Sie SUBVIEW als Unteransicht zu dieser CONTAINERVIEW hinzu und fügen als Einschränkungen etwa Folgendes hinzu:
V: | - [SUBVIEW] - |
H: | - [SUBVIEW] - |
Diese Einschränkungen sollten zur SUBVIEW-Übersicht hinzugefügt werden, also zur CONTAINERVIEW.
Wenn Sie SUBVIEW entfernen, indem Sie einfach alle CONTAINERVIEW-Einschränkungen überprüfen, können Sie feststellen, dass zwei nicht mehr vorhanden sind.
quelle
Diese Frage kann auch vom Interface Builder bewiesen werden. Wenn Sie a
UIView
auf dieViewController
Add Constraints ziehen und dort ablegen und dann entfernenUIView
, werden die blauen Constraints ausgeblendet.quelle