Pytanie, które mam, jest proste, ale nie udało mi się znaleźć żadnych informacji w dokumentacji.
Co dzieje się z ograniczeniami układu, gdy widok zostanie usunięty z hierarchii widoków (lub przeniesiony do innego widoku)?
Na przykład, miejmy kontener C
z podglądami podrzędnymi A
i B
. Kontener C
ma pewne ograniczenia. Wtedy dzwonimy [A removeFromSuperview]
. Po co się dzieje z ograniczeniami A
?
Co wtedy się stanie, jeśli dodamy A
do C
ponownie?
ios
autolayout
nslayoutconstraint
Sulthan
źródło
źródło
Ponieważ też miałem to pytanie, sprawdziłem w Apple Docs tylko kopnięcia i okazuje się, że jest udokumentowane, że ograniczenia zostały usunięte.
Dokumentacja dla państw metoda UIView removeFromSuperview:
Nie jestem pewien, czy zostało to udokumentowane w zeszłym roku, kiedy opublikowano oryginalne pytanie, ale pomyślałem, że udostępnię te informacje na wypadek, gdyby ktoś ich potrzebował ...
źródło
Pamiętaj jednak, że jeśli masz dwa niezależne widoki nadrzędne A i B oraz podwidok C, gdzie C jest obecnie podziałem A, z odpowiednimi ograniczeniami, wywołanie [B addSubview: C] NIE usunie żadnych ograniczeń związanych z A i C, a układ automatyczny zacznie generować wyjątki, ponieważ te ograniczenia nie odnoszą się już do widoków w tej samej hierarchii.
Będziesz musiał jawnie wywołać [C removeFromSuperview], aby usunąć ograniczenia, przed dodaniem C do B.
To prawda na Mac OS X - nie sprawdzałem iOS
źródło
Więzy są również usuwane, gdy ty
[A removeFromSuperview]
Zostają zapomniane, a ponowne dodanie A do C nie dodaje żadnych ograniczeń.
źródło
Są również usuwane, możesz wykonać prosty test. Wybierz widok SUBVIEW i utwórz ograniczenia kosztowe, które ograniczają SUBVIEW do zmiany rozmiaru jego superwizji (jak dołączone do krawędzi superview). Aby to zrobić, dodajesz SUBVIEW jako podwidok do tego CONTAINERVIEW i dodajesz jako ograniczenia coś takiego:
V: | - [SUBVIEW] - |
H: | - [PODGLĄD] - |
Te ograniczenia należy dodać do nadzoru SUBVIEW, a tym samym CONTAINERVIEW.
Jeśli usuniesz SUBVIEW, po prostu sprawdzając wszystkie ograniczenia CONTAINERVIEW, zobaczysz, że dwóch już nie ma.
źródło
To pytanie również może udowodnić kreator interfejsów. Po przeciągnięciu i upuszczeniu a
UIView
naViewController
ograniczeniach dodawania, a następnie usuwaniuUIView
, możesz zobaczyć, że niebieskie ograniczenia znikają.źródło