2013-07-18 9 views
7

Lubię tworzyć moje widoki jako samodzielne pliki Xib, a następnie utworzyć je i dodać jako subviews.Automatyczny układ z UINavigationBar i UIBarButtonItem

Tak, podczas pracy z UINavigationBar, spodziewałem się być w stanie zrobić to samo, tworząc najpierw mój własny pogląd - od XIb - następnie dodanie go jako niestandardowego celu UIBarButtonItem:

UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView]; 

Następnie dodanie do paska nawigacji:

self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ]; 

Jak dotąd tak dobrze.

Teraz, _myCustomView używa Auto Layout (AL) i myślałem, że to nie będzie problem. Nie w tym przypadku. Próbowałem prawie wszystkiego. Nic nie zadziałało. Próbowałem nawet dodać niestandardowy widok jako podzbiór kontrolera z paskiem nawigacyjnym. Myśląc, że jako rodzeństwo w hierarchii widoku, AL potraktuje to jako zwykły widok poza UINavigationBar.

To też nie działa. Kontroler updateViewConstraints został wywołany, ale nigdy nie został zastosowany. Pierwotna ramka widoku pozostała na CGRectZero. Wygląda to tak, jakby AL zobaczył, że widok jest na szczycie UINavigationBar, nawet jako rodzeństwo, i decyduje, że nie wymaga rozkładania.

Oczywiście, wypróbowałem bringSubviewToFront, translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints i tak dalej. Ten ostatni dał piękny:

Zakończenie aplikację spowodowane nieprzechwyconego wyjątkiem „NSInternalInconsistencyException”, powód: „Auto-układ nieruchomego wymaganych po wykonaniu -layoutSubviews. MyNavigationBar's implementacja -layoutSubviews wymaga połączenia super. '

Więc pytanie brzmi, czy ktoś załadowane niestandardowego widoku z Al z XIB i skutecznie ustawić to jako customView na UIBarButtonItem? Jeśli tak to jak?

+0

Nie zgłosiłem jeszcze do tego radaru, ale wpadłem też na to i wydaje się, że to błąd iOS 6. Utworzenie UIBarButtonItem i jego widok programowo wykazuje ten sam problem. – Ryan

+0

Czy znalazłeś rozwiązanie tego problemu? – Redwarp

+0

Jakieś wiadomości na ten temat? Myślę, że nadal mam podobny problem (aczkolwiek z paskiem narzędzi) w iOS 7. –

Odpowiedz

1

Wygląda duplikat iOS Autolayout and UIToolbar/UIBarButtonItems

UIBarButtonItems nie dziedziczą UIView, więc przy użyciu automatycznego układu oparte widoków niestandardowych w nich nie może być w pełni obsługiwany. Wygląda na to, że musisz zrobić wstępny układ automatyczny, dopóki problem nie zostanie rozwiązany. Sugerowałbym zgłoszenie błędu.

EDYTOWANIE: Przez wstępną kwestię automatycznego układania, mam na myśli bezpośrednie manipulowanie ramką twoich widoków.