2013-09-25 11 views
15

Występują problemy z [UIBarButtonItem appearance] dla obrazu tła przycisku Wstecz.Obraz tła przycisku Wstecz nie pojawia się, zanim zostanie dotknięty. IOS 7

Normalnie (iOS 5 i iOS 6) udało mi się ustawić obraz tła przycisku tyłu tak:

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

Ale w iOS 7 obraz tła nie pojawia się na przycisku Wstecz. Dziwne jest to, że obraz tła faktycznie pojawia się po jednokrotnym naciśnięciu przycisku wstecz.

Próbowałem ustawić obraz dla wszystkich stanów, aby sprawdzić, czy iOS 7 używał jakiegoś nowego stanu dla nietkniętego przycisku wstecz, ale tak się nie dzieje.

Czy masz pojęcie, co robię źle?

+0

Jest możliwe, aby naprawić glitch graficzna metoda swizzled; zobacz moją odpowiedź na http://stackoverflow.com/a/19452709/1754225. Ale niektóre inne alternatywy mogą być lepsze. –

+0

Niestety mam również ten sam problem. Czy masz jakieś rozwiązanie? – Sourabh

+0

Nie, nie zrobiłem. Musiałem stworzyć niestandardowy przycisk powrotu jako 'UIButton' i ustawić go jako' leftBarButtonItem' do obejścia go. :-( –

Odpowiedz

0

spróbuj zmienić kolor tinty przycisku. Występuje pewien problem w systemie iOS 7 dla UIBarButton

+0

Czy możesz podać dowody na roszczenie? Mam ten sam problem i muszę go wyjaśnić klientowi.Dlatego pytam:) – Popara

+0

Najpierw spróbuj sam i jeśli działa, to możesz to wytłumaczyć również klientowi – Ekra

1

Szukałem tego problemu i okazało się, że nie jesteś jedynym, który ma ten sam problem. Jest wielu innych, którzy mają ten sam problem z UIAppearance. Są dowody (wyjaśnić do klienta):

  1. UIBackButton Background Image not appearing
  2. Back button is not visible in iOS 7

W tym przypadku, co można zrobić, to postępować zgodnie z odpowiedzi udzielonej w drugi link.

Można też ustawić właściwość backIndicatorImage na UINavigationBar do niestandardowego obrazu czy można zmienić kolor backIndicatorImage poprzez ustawienie właściwości tintColor na UINavigationBar.

Można utworzyć niestandardową UIBarButtonItem i ręcznie przypisać ją jako UINavigationItem 's leftBarButtonItem.

1

rozwiązanie, które sprawi, że tła są wyświetlane poprawnie na iOS7 jest co OS 7 custom back button. Swizzuje metodę naprawiania błędu Apple'a (który polega na tym, że zapominają wywołać setNeedsDisplay w prywatnym widoku, gdy zmienia się obraz tła). Idąc borderless jest prawdopodobnie lepiej, jeśli to możliwe, ale swizzling działa.

0

Aby pracować z ios7 trzeba użyć

UIImage *backButton = [[UIImage imageNamed:@"icon_back" resizableImageWithCapInsets:UIEdgeInsetsZero]; 
if ([UINavigationBar instancesRespondToSelector:@selector(setBackIndicatorImage:)]) { 
    [[UINavigationBar appearance] setBackIndicatorImage:backButton]; 
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButton]; 
}else{ 
//ios 5 and 6 code 
}