2014-09-26 14 views
15

Con iOS 8 il concetto di sole dimensioni di iPhone e iPad insieme a verticale e orizzontale è cambiato e quindi l'impostazione dell'immagine di sfondo delle barre di navigazione non funziona allo stesso modo. Attualmente sto utilizzando il seguente codice:iOS 8 NavigationBar BackgroundImage

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

La porzione metriche bar è stata deprecata come di iOS 8. Per la messa in mia app ripete semplicemente l'immagine barra orizzontale quando su un iPhone 6 o 6 Plus. Ho esaminato le sezioni immagine ma non penso che sia la soluzione.

portrait landscape

+0

Il problema è stato risolto @ Chris. –

risposta

69

ho trovato la soluzione. Avevo bisogno di usare il metodo resizableImageWithCapInsets: resizingMode: e impostare il resizingMode su UIImageResizingModeStretch, altrimenti l'immagine sarebbe ancora visualizzata nella barra di navigazione.

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

perfetto. In tutte le altre soluzioni l'immagine si stava ripetendo. Mi hai salvato la giornata. – nidhin

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

Utilizzare il codice sopra immagine piccola dimensione (40*navigarbarheight) 40 works.And utilizzare è la larghezza dell'immagine

+0

Spiacente, ho aggiornato il codice che mostra che sto già utilizzando immagini con inserti cap ridimensionabili e che non sembra funzionare. – Chris

+0

Sì, questo non funziona. L'immagine è ancora affiancata. – HughHughTeotl

0

questo è il codice di esempio a più precis e preciso per adattarsi a tutte le dimensioni dello schermo. aiuterà

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