2013-10-07 17 views
8

Under iOS7 byłem przeżywa problem gdzie element przycisk wstecz nie pojawi się, jeśli został ustawiony określony obraz tła:przycisk Powrót dziwnie znikają w UINavigationController ale wciąż pracuje

int imageSize = 21; //REPLACE WITH YOUR IMAGE WIDTH 

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) 
                forBarMetrics:UIBarMetricsDefault]; 
UIImage *barBackBtnImg = [[UIImage imageNamed:@"BackArrowDark.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)]; 

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:barBackBtnImg 
               forState:UIControlStateNormal 
               barMetrics:UIBarMetricsDefault]; 

Robiąc to, jakikolwiek ViewController, który wepchnę do kontrolera nawigacyjnego, nie będzie miał przycisku "Wstecz", mimo że naciśnięcie tam, gdzie powinien być, spowoduje jego pojawienie się, a każde kolejne naciśnięcie tego kontrolera widoku będzie miało przycisk obecny na ekranie.

Ten problem występuje tylko w systemie iOS7: wszystko działa idealnie w systemie iOS6.

Zmiana tylnego przycisku całkowicie za pomocą przycisku leftBarButtonItem powoduje wyłączenie tylnego przesunięcia, więc nie jest to opcja.

Każdy pomysł, co robię źle?

Dziękuję za uwagę.

Odpowiedz

14

Po wypróbowaniu różnych rozwiązań, stwierdziliśmy, że zmiany backIndicatorImage działa najlepiej pod iOS7 i wydaje się być zgodna z paradygmatem interfejsu iOS7:

[[UINavigationBar appearance] setTintColor:[UIColor grayColor]]; 
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault]; // Takes out title 

UIImage *backButtonImage = [UIImage imageNamed:@"BackArrowDark.png"]; 

if ([UINavigationBar instancesRespondToSelector:@selector(setBackIndicatorImage:)]) { 
    [[UINavigationBar appearance] setBackIndicatorImage:backButtonImage]; 
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage]; 
} else { 
    int imageSize = 21; // REPLACE WITH YOUR IMAGE WIDTH 

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
} 

z tą metodą:

  • Po powrocie do kontrolera nawigacyjnego przejście elementu przycisku z powrotem jest takie samo jak w przypadku domyślnego wskaźnika (odejście od przycisku cofania również w przypadku iOS6);
  • Pod iOS6 przycisk BackButton zostaje zmieniony i zachowuje domyślne zachowanie dla iOS6.
  • Jestem szczęśliwy!
3

Upewnij się, że nie dzwonisz to w kontrolerze widoku:

self.navigationController.navigationBar.tintColor = [UIColor redColor]; 

w iOS 7, to będzie odcień paska nawigacji, ale także dokonać przyciski niewidoczne, ale funkcjonalny tak jak opisujesz .

Powiązane problemy