2014-09-26 17 views
15

Mit iOS 8 hat sich das Konzept von iPhone- und iPad-Größen sowie von Hoch- und Querformat geändert und das Hintergrundbild der Navigationsleiste funktioniert nicht mehr. Derzeit verwende ich den folgenden Code:iOS 8 NavigationBar HintergrundBild

UIImage *NavigationPortraitBackground = [[UIImage imageNamed:@"nav-image-portrait"] 
             resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 

UIImage *NavigationLandscapeBackground = [[UIImage imageNamed:@"nav-image-landscape"] 
              resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 

[[UINavigationBar appearance] setBackgroundImage:NavigationPortraitBackground forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:NavigationLandscapeBackground forBarMetrics:UIBarMetricsCompact]; 

Die Bar-Metriken Teil wurde als von iOS 8. veraltet Wenn meine app Starten sie einfach die Bar Bild wiederholt sich horizontal, wenn sie auf einem iPhone 6 oder 6 Plus. Ich habe in Image Slices geschaut, aber ich denke nicht, dass das auch die Lösung ist.

portrait landscape

+0

Ist Ihr Problem gelöst @ Chris. –

Antwort

69

I die Lösung gefunden. Ich musste die Methode resizableImageWithCapInsets verwenden: resizingMode: und setze den resizingMode auf UIImageResizingModeStretch, sonst würde das Bild immer noch in der Navigationsleiste erscheinen.

Objective-C:

[[UIImage imageNamed:@"nav-image-portrait"] 
             resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch]; 

Swift 3/4:

UINavigationBar.appearance().setBackgroundImage(UIImage(named: "image")!.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), for: .default) 
+0

perfekt. Bei allen anderen Lösungen wiederholte sich das Bild. Du hast meinen Tag gerettet. – nidhin

4
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"navbarimg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault]; 

Verwenden der obige Code es (40*navigarbarheight) 40 kleine Größe Bild verwenden works.And ist die Breite des Bildes

+0

Entschuldigung, ich habe den Code aktualisiert, der zeigt, dass ich bereits Bilder mit resizierbaren Caps verwende und das scheint nicht zu funktionieren. – Chris

+0

Ja, das funktioniert nicht. Das Bild ist immer noch gekachelt. – HughHughTeotl

0

Dies ist ein Beispielcode bei mehr precis und genaue auf allen Bildschirmgrößen zu passen. es wird helfen

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width; 
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"header"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, screenWidth-50, 50)] forBarMetrics:UIBarMetricsDefault];