2013-02-01 19 views
5

Próbuję ustawić niestandardowy obraz cienia dla paska nawigacji w widokach tabel, ale jest on wyświetlany tylko w niektórych widokach. Stworzyłem super klasę, aby ustawić style dla widoków tabel.Zestaw nawigacyjny ShadowShadowImage nie zawsze działa

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Set navigation bar background 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbarbackground.png"] forBarMetrics:UIBarMetricsDefault]; 

    // Set navigation bar shadow imag 
    [self.navigationController.navigationBar setShadowImage:[UIImage imageNamed:@"navigationbarshadow.png"]]; 

W widoku widocznym przy uruchomieniu aplikacji nie jest wyświetlany żaden cień. Ale kiedy dotknę przycisku [+] na pasku nawigacyjnym, aby otworzyć mój nowy "", dodaj nowy element widoku tabeli "", to pokazuje cień.

Czy ktoś może wskazać mi właściwy kierunek?

+0

Powinieneś używać proxy wyglądu. – dasdom

+0

Dzięki. Próbowałem, ale z tym samym rezultatem. – lsdevries

+0

Upewnij się, że 'self.navigationController' w' viewDidLoad' nie jest 'nil'! – MoLice

Odpowiedz

7

Serwer proxy wygląd powinien działać.

Po prostu wywołaj go gdzieś (np. W AppDelegate) podczas uruchamiania.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [self customizeAppearance]; 
    return YES; 
} 

- (void) customizeAppearance 
{ 
    // Set the background image for *all* UINavigationBars 
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationbarbackground"] forBarMetrics:UIBarMetricsDefault]; 

    // Set the shadow image for *all* UINavigationBars 
    [[UINavigationBar appearance] setShadowImage:[UIImage imageNamed:@"navigationbarshadow.png"]]; 

    //add other appearance stuff here... 
} 

Jeśli jednak stworzyć storyboard z wieloma UINavigationController w niej jest i kilka Segue za popychanie kontrolera nawigacyjnego może masz uszkodzoną strukturę widok kontroler, który może być problem tutaj.

Innym możliwym problemem może być opcja Clip Subviews paska nawigacji gdzieś w pliku nib lub w scenorysie. Upewnij się, że jest wyłączony, jeśli chcesz cienia (obrazu)!

ClipSubviews

Nawiasem mówiąc, jeśli używasz imageNamed nie muszą zawierać rozszerzenie pliku.

+2

Wow, dziękuję! Usunięcie zaznaczenia subskrybowanych klipów pomogło. Powodem, dla którego nadałem stylizację w super klasie, jest to, że chciałem zachować wszystkie stylizacje w jednym miejscu. – lsdevries

+0

pracował jak czar !! thanx –

0

Wypróbuj!

[[UINavigationBar appearance] setShadowImage:[UIImage imageNamed:@"navbar-iphone.png"]]; 
+0

Dzięki, ale już próbowałem. Czy użycie proxy wyglądu ma inny wynik niż użycie tego w każdym widoku tabeli ?: [self.navigationController.navigationBar setBackgroundImage: [UIImage imageNamed: @ "navigationbarbackground.png"] forBarMetrics: UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage: [UIImage imageNamed: @ "navigationbarshadow.png"]]; – lsdevries

9

Musisz ustawić niestandardowy backgroudImage dla UINavigationBar, a następnie shadowImage może działać.

+0

To ważna informacja! Wielu zdaje się nie wiedzieć, że ... zabrało mnie wieki ... – Rikco