8

Posiadam stos trzech VC, które są koordynowane za pomocą kontrolera nawigacyjnego i korzystają z paska nawigacyjnego. Na tym pasku nawigacyjnym, w każdej VC I dodaje ten sam przycisk (przycisk „Wyloguj”) jako elementu prawym przyciskiem pasek:Pasek nawigacyjny ios Prawy przycisk przesuwa element podczas przesuwania nowego kontrolera widoku.

UIBarButtonItem *logoutButton = 
[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"LogoutButtonTitle", @"") 
            style:UIBarButtonItemStyleBordered 
            target:self 
            action:@selector(logout)]; 

[categoriesViewController.navigationItem setRightBarButtonItem:logoutButton]; 
[[self navigationController] pushViewController:categoriesViewController animated:YES]; 

Więc każdy kontroler ma widok tego przycisku wylogowania w pasku nawigacyjnym. Kiedy wciskam dowolny z tych kontrolerów na stos nawigacyjny, nowe kontrolery widoku ładują się zgodnie z oczekiwaniami, wszystko jest wyświetlane i działa poprawnie, ale zaraz po wyświetleniu nowego kontrolera widoku (po zakończeniu animacji) przycisk wylogowania przesuwa o około 3 piksele do dobrze.

Próbowałem dodać przycisk przed naciśnięciem VC, w metodach inicjacji VC, w viewDidLoad i viewDidAppear, ale nadal zachowuje się tak samo. Nie mogę pozbyć się tej zmiany.

Dziwne jest to, że przycisk Wstecz znika i pojawia się po naciśnięciu nowego przycisku VC (przy użyciu domyślnej animacji), ale przycisk "Wyloguj" wydaje się pozostawać w miejscu i po prostu przesuwa się w prawo po zakończeniu animacji. Ponadto czcionka na przyciskach nie jest czcionką domyślną, ale jedna z czcionek systemowych (Helvetica light) może być z tym powiązana.

Jakieś pomysły na to, dlaczego tak się dzieje?

+0

To dlatego, że nie używam domyślnej czcionki. W jakiś sposób, podczas renderowania przycisku z inną czcionką na ekranie, jego ramka musi zostać przeliczona - lub to jest moje najlepsze przypuszczenie. –

+0

Mam ten sam problem - czy w końcu to naprawiłeś? –

Odpowiedz

0

Spróbuj zadzwonić

self.navigationItem.rightBarButtonItem = yourUIBarButtonItem; 

także jaki jest Twój przycisk wylogowania, to jest prawidłowa klasa? Być może trochę więcej kodu?

1

Miałem ten sam problem. To dlatego, że nie ustawiono kontrolera rootview. Ustaw główną stronę lub pierwszą stronę, na której pierwszy pasek nawigacyjny będzie pochodził z kontrolera rootview. Stamtąd [self.navcontroller] pushviewcontroller ...].