2013-02-01 2 views
5

Ich versuche, in meiner Tabelle Ansichten, die eine benutzerdefinierte Schattenbild für die Navigationsleiste zu setzen, aber es ist nur in einigen Ansichten zeigt. Ich habe eine Superklasse erstellt, um die Stile für meine Tabellenansichten festzulegen.navigationbar setShadowImage nicht immer arbeitet

- (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"]]; 

In der Ansicht, die ich beim Starten meiner App sehe, wird kein Schatten angezeigt. Aber wenn ich den [+] - Knopf in meiner Navigationsleiste berühre, um meine 'neue Tabelle' zu öffnen, wird ein Schatten angezeigt.

Könnte mir jemand in die richtige Richtung weisen hier?

+0

Sie sollten den Darstellungsproxy verwenden. – dasdom

+0

Danke. Ich habe das versucht, aber mit dem gleichen Ergebnis. – lsdevries

+0

Stellen Sie sicher, dass "self.navigationController" in "viewDidLoad" nicht "nil" ist! – MoLice

Antwort

7

Der Darstellungsproxy sollte funktionieren.

es einfach irgendwo nennen (zum Beispiel in Ihrem AppDelegate) beim Start.

- (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... 
} 

Allerdings, wenn Sie ein Storyboard mit mehreren UINavigationController sind drin und ein Bündel von Segue schieben Navigation Controller erstellen Sie möglicherweise eine beschädigte View-Controller-Struktur erhalten, die hier das Problem sein könnte.

könnten andere mögliche Probleme die Clip Subviews Option einer Navigationsleiste irgendwo in Ihrer NIB-Datei oder Du Storyboard. Stellen Sie sicher, dass es ausgeschaltet ist, wenn Sie den Schatten (Bild) wollen!

ClipSubviews

By the way, wenn Sie verwenden Sie Imagenamed nicht brauchen, um die Dateierweiterung enthalten.

+2

Wow danke! Das Deaktivieren der Clip-Subviews hat den Trick vollbracht. Der Grund, warum ich das Styling in eine Superklasse gebracht habe, ist, dass ich das ganze Styling an einem Ort behalten wollte. – lsdevries

+0

hat wie ein Charme gearbeitet !! danke –

0

Versuchen Sie dies!

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

Danke, aber das habe ich schon probiert. Sollte das Aussehen Proxy verwenden, haben ein anderes Ergebnis als diese Ansicht in jedem Tisch mit ?: [self.navigationController.navigationBar setBackgroundImage: [UIImage imagenamed: @ "navigationbarbackground.png"] forBarMetrics: UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage: [UIImage imageNamed: @ "navigationbarshadow.png"]]; – lsdevries

9

Sie müssen benutzerdefinierte backgroudImage für UINavigationBar festlegen, dann kann die shadowImage funktionieren.

+0

Das ist eine wichtige Information! Viele scheinen das nicht zu wissen. – Rikco