2013-10-16 7 views
7

Próbowałem utworzyć kontroler widoku kontenera, który zapewnia niektóre nałożone widoki, takie jak UINavigationController i UITabBarController, aby uzyskać kontrolery widoku w systemie iOS 7. Aby poprawnie przygotować układ z zamkniętymi widokami, wypróbowałem prawie wszystko, co mogę wymyślić w odniesieniu do do implementacji -bottomLayoutGuide w kontenerze i zawartych kontrolerach widoku, ale bez powodzenia. Metoda jest wywoływana, ale wartość nie wydaje się być używana.Czy jest możliwe wdrożenie topLayoutGuide i bottomLayoutGuide w podukładach UIViewController?

Połączyłem szybki przykład na https://github.com/stefanfisk/custom-layout-guides, ale tam nie byłem w stanie nawet uzyskać wywoływanie akcesorów.

+0

Mam edytowane pytanie z linkiem do prostego projektu, który pokazuje, jak nic się nie dzieje. –

Odpowiedz

2

Znalazłem, że po skonfigurowaniu ograniczeń w kodzie, np.

[self.view addConstraints:[NSLayoutConstraint 
          constraintsWithVisualFormat:@"V:[topLayoutGuide][mainView]" 
          options:0 
          metrics:nil 
          views:@{@"topLayoutGuide" : self.topLayoutGuide, @"mainView" : self.mainView}]]; 

wywala z:

2013-10-16 22:23:27.119 Custom Layout Guides[46840:a0b] -[LayoutGuide superview]: unrecognized selector sent to instance 0x8c80c80 
2013-10-16 22:23:27.124 Custom Layout Guides[46840:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[LayoutGuide superview]: unrecognized selector sent to instance 0x8c80c80' 

To dziwne, że Auto Układ próbuje zadzwonić superview na prowadnicy układu, jak powinno być zgodne tylko z protokołem UILayoutSupport.

Zauważyłam również, że topLayoutGuide & bottomLayoutGuide są zadeklarowane jako readonly:

@property(nonatomic, readonly, retain) id<UILayoutSupport> topLayoutGuide 
@property(nonatomic, readonly, retain) id<UILayoutSupport> bottomLayoutGuide 
+0

Wygląda na to, że nie powinny być nadpisywane przez podklasy, ale dla mnie dokumentacja brzmi tak, jakby rzeczywiste zwrócone obiekty były używane przez mechanizm układu, co oznacza, że ​​nadpisywanie powinno działać. Obiekt zwrócony przez implementacje szkieletowe jest jednak tej klasy, co jest oczywiście widokiem: https://github.com/JaviSoto/iOS7-Runtime-Headers/blob/master/Frameworks/UIKit.framework/_UILayoutGuide.h –

+0

@ StefanFisk: wydaje mi się, że w tym przypadku dokumentacja nie pasuje do implementacji. Może możesz znaleźć obejście, które nie będzie wymagać nadpisywania przewodników układu? –

+1

Po prostu: wewnętrznie, przewodniki układu są UIViews, które są zgodne z UILayoutSupport dodane do hierarchii widoku. Może to mogłoby działać, jeśli zwracanie niestandardowych podklas UIView po dodaniu ich do widoku? – Accatyyc

Powiązane problemy