2013-08-29 11 views
9

UIWindow ma prywatną metodę _autolayoutTrace, która pomaga znaleźć niejednoznaczne układy. Jest to bardzo ładne i wygodne i daje coś takiego:Co oznacza gwiazdka (*) na wyjściu [[UIWindow keyWindow] _autolayoutTrace]]

*<UIWindow:0x13436fd0> - AMBIGUOUS LAYOUT 
| *<UIView:0xd5e0b30> 
| | *<PbJellyContentContainerView:0xd5e0ff0> 
| | | *<UIView:0x20710ee0> 
| | | | *<PbMapContainerView:0x20710c90> 
| | | | | <MKMapView:0x2070df70> 
| | | | | | <UIView:0xd1cca20> 
| | | | | | | <MKBasicMapView:0xd1cd020> 
.... 

Moje pytanie nie dotyczy dwuznaczności. Chodzi o gwiazdkę przed niektórymi widokami. Jakie jest jego znaczenie?

Domyślam się, że oznacza on wszystkie widoki, które używają automatycznego układu. Ale w jaki sposób system to określa?

Aktualizacja:

Wydaje się, że gwiazdka oznacza wszystkie widoki, które albo mają co najmniej jedno ograniczenie ustawione lub mających podrzędny, który ma co najmniej jedno ograniczenie ustawione.

Ustawienie translatesAutoresizingMaskIntoConstraints na false bez ustawiania ograniczenia nie daje gwiazdki.

+0

oczywiście, ale nie jestem jeszcze zadowolony;? ( – Klaas

+0

Czy możesz mi powiedzieć, w jaki sposób można dostać to próbowałem [[UIWindow keyWindow] _autolayoutTrace], ale to nie daje mi takiego śladu –

+0

@MehulThakkar po prostu wpisz 'po [[UIWindow keyWindow] _autolayoutTrace]' do konsoli debugowania. – Klaas

Odpowiedz

7

To jest legenda o -[UIView _autolayoutTrace] z WWDC 2015 session #219 video na 31:00

* - is laid out with auto layout 
+ - is laid out manually, but is represented in the layout engine because translatesAutoresizingMaskIntoConstraints = YES 
• - layout engine host 
0

Dostałem twój punkt, myślę, że tak, * jest dla składników, na których można zastosować Autolayout. I oznacza, że ​​jeśli istnieje przycisk następnie pokaże go jako

*<UIRoundedRectButton:0x1f053a50> 
| | | <UIGroupTableViewCellBackground:0x1f053b20> 
| | | <UIImageView:0x1f0542f0> 
| | | <UIButtonLabel:0x1f053db0> 

to oznacza, że ​​rectButton jest wystawiony przez ciebie i można zastosować autolayout na tym, natomiast pozostałe 3 są pod automatycznie zostaną rozplanowane się.

* będą wyświetlane tylko wtedy, gdy conajmniej 1 składnik w interfejsie ma UIAutolayout ON, jeśli wszystkie składniki bez autoLayout, to zrozumieć całą UIView jako pojedynczy składnik i nie pokaże * dla tego