2013-06-27 9 views
9

tworzę mój widok hierarchii programowo tak:Konfigurowanie ograniczeń automatycznego układu dla programowej hierarchii widoków?

UIWindow* window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

UIViewController1* viewController1 = [[UIViewController1 alloc] init]; 
UIViewController2* viewController2 = [[UIViewController2 alloc] init]; 

UINavigationController* navigationController = [[UINavigationController alloc] init]; 
[navigationController setViewControllers:@[viewController1, viewController2] animated:NO]; 

[window setRootViewController:navigationController]; 
[window makeKeyAndVisible]; 

dwóch VC są ładowane z XIB, że w obu przypadkach używać autoLayout. Wszystko wygląda dobrze, ale kiedy rzeczywiście zrobić po [[UIWindow keyWindow] _autolayoutTrace] I trochę niepokojące AMBIGUOUS LAYOUT ostrzeżenia w konsoli:

*<UIWindow:0xc63bec0> 
| *<UILayoutContainerView:0xd3d79b0> - AMBIGUOUS LAYOUT 
| | *<UINavigationTransitionView:0xd3d8b60> - AMBIGUOUS LAYOUT 
| | | *<UIViewControllerWrapperView:0xd566c00> - AMBIGUOUS LAYOUT 
| | | | *<UIView:0xc66b290> - AMBIGUOUS LAYOUT 
| | | | | *<UIView:0xc66b0e0> - AMBIGUOUS LAYOUT 
| | | | | | *<MKMapView:0xd504800> - AMBIGUOUS LAYOUT 

Więc moje pytanie brzmi, jak mogę się ich pozbyć? Lub bardziej ogólnie sformułowane, jak skonfigurować programowo okno i hierarchię widoków za pomocą automatycznego układu?

Uważam, że dokumentacja jest bardzo ogólnikowa, jeśli chodzi o programowe ustawianie okna. I chociaż oglądałem wszystkie trzy filmy z WWDC w tej sprawie, nie mogłem się zorientować, jak to zrobić.

EDYCJA: Wygląda na to, że problemy dotyczą wyłącznie nowego systemu iOS 7. Ponieważ jest on objęty umową NDA, przeniesiemy tę dyskusję na wyznaczone fora programistów Apple.

Odpowiedz

1

AMBIGUOUS LAYOUT oznacza, że ​​nie określono wystarczająco dużo dla funkcji automatycznego układu, aby wiedzieć, jak rozłożyć swój widok. Innymi słowy, to, co określiłeś, jest nieco niejasne.

Różni się to od złamanych wiązań, w których występują dwa lub więcej ograniczeń, które informują układ automatyczny, że robi różne rzeczy.

Przy niejednoznacznym układzie, Auto Layout będzie spróbuj, aby dowiedzieć się, co masz zamiar zrobić. Mam nadzieję, że będzie to, czego chcesz, ale nie jest to gwarantowane. Stąd ostrzeżenie.

Ta odpowiedź nie jest tak naprawdę miejscem, w którym można się dowiedzieć, jak zacząć. Ale na szczęście teraz pojawia się więcej zasobów Auto Layout.

Jest książka iOS Auto Layout Demystified. Chociaż kupiłem go, nie miałem jeszcze okazji go przeczytać. Wygląda jednak całkiem dobrze.

Zobacz także doskonały artykuł Ole Begemanna: 10 Things You Need To Know About Cocoa Autolayout.

Aby zapoznać się z samouczkiem dla początkujących, należy zapoznać się z artykułem Beginning Auto Layout in iOS 6: Part 1/2 firmy Ray wenderlich.

Wreszcie, jeśli mogę powiedzieć, że istnieje jedna rzecz Automatycznego Układu, która dostaje mnie za każdym razem, to zapomina ustawić flagę setTranslatesAutoresizingMaskIntoConstraints na NO dla widoków, które programowo utworzę, że chcę użyć automatycznego układu. Trzymaj to z tyłu głowy, gdy zobaczysz jakiekolwiek dziwne wyglądy ograniczenia na konsoli.

+0

Rozumiem ogólną filozofię i sposoby debugowania, ale moje pytania dotyczą sposobu budowania hierarchii widoku od zera w kodzie. Nie mogę podłączyć mojego UIWindow do tego super widoku, ponieważ nie ma go. – ABeanSits

Powiązane problemy