iOS 8 NavigationBar BackgroundImage

Avec iOS 8, le concept de la taille de l'iPhone et de l'iPad, du portrait et du paysage a changé et, par conséquent, le réglage de l'image de fond des barres de navigation ne fonctionne pas de la même manière. Actuellement, j'utilise le code suivant:

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 forBarMesortingcs:UIBarMesortingcsDefault]; [[UINavigationBar appearance] setBackgroundImage:NavigationLandscapeBackground forBarMesortingcs:UIBarMesortingcsCompact]; 

La partie mesure des mesures a été abandonnée à partir d'iOS 8. Au démarrage de mon application, elle répète simplement l'image de la barre horizontalement sur un iPhone 6 ou 6 Plus. J'ai regardé dans des tranches d'image mais je ne pense pas que c'est la solution non plus.

portraitpaysage

J'ai trouvé la solution. J'avais besoin d'utiliser la méthode resizableImageWithCapInsets: resizingMode: et de définir le resizingMode à UIImageResizingModeStretch, sinon l'image serait toujours en mosaïque dans la barre de navigation.

Objectif 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) 
 [[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"navbarimg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMesortingcs:UIBarMesortingcsDefault]; 

Utilisez le code ci-dessus cela fonctionne.Et utiliser une image de petite taille (40*navigarbarheight) 40 est la largeur de l'image

C'est un exemple de code plus précis et plus précis pour s'adapter à toutes les tailles d'écran. ça aidera

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