Je développe dans IOS, j'utilise le code suivant pour définir un arrière-plan sur navigationBar
.
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar-back"] forBarMetrics:UIBarMetricsDefault];
Et je veux ajouter une image sur navigationBar
et au centre de navigationBar
comme sur l’image suivante.
Comment ajouter une image au centre de navigationBar dans Objective-C?
Merci d'avance.
Définir l'affichage du titre de navigation comme ci-dessous
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img.png"]];
UIImage *img = [UIImage imageNamed:@"1.png"];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[imgView setImage:img];
// setContent mode aspect fit
[imgView setContentMode:UIViewContentModeScaleAspectFit];
self.navigationItem.titleView = imgView;
Comme vous l'avez dit pour définir une icône pour l'application. Vous aimerez peut-être cela, qui affichera une icône pour l’ensemble de l’application.
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
CGSize imageSize = CGSizeMake(40, 40);
CGFloat marginX = (self.navigationController.navigationBar.frame.size.width / 2) - (imageSize.width / 2);
imageView.frame = CGRectMake(marginX, 0, imageSize.width, imageSize.height);
[self.navigationController.navigationBar addSubview:imageView];
Sortie:
Une chose à mentionner ici est d’utiliser une largeur de 3 pour UIImageView. C'est important - si c'est 2 (ou n'importe quel nombre pair), alors l'image sera floue. La définition de clipToBounds = NO et contentMode = UIViewContentModeScaleAspectFill signifie que l'image s'affiche en dehors de la largeur de la vue (fin) et est correctement proportionnée.
UIImageView *imageView = [[UIImageView alloc]
initWithFrame:CGRectMake(0,0,3,44)];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = NO;
imageView.image = [UIImage imageNamed:@"navigation-logo"];
controller.navigationItem.titleView = imageView;
viewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];
Je faisais face au même problème, puisque iOS 11 et Xcode 9 ont commencé à gérer les barres de navigation avec la mise en page automatique au lieu de cadres, vous devez connaître la mise en page de votre barre de navigation.
Dans la session 204 de la WWDC, la mise à jour de votre application pour iOS 11 indiquait que UIToolBar et UINavigationBar avaient été mis à niveau pour utiliser la présentation automatique. Pour éviter les affichages personnalisés de taille zéro, vous devez en savoir plus sur certaines choses.
UINavigation et UIToolBar fournissent une position, ne vous en souciez pas.
Vous devez fournir la taille de la vue personnalisée avec l’un des éléments suivants:
En réponse à votre question, j'ai défini le titleView avec un ImageView, en fournissant la taille de deux manières différentes:
Donner explicitement la hauteur et la largeur.
-(void)updateNavTitleView{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
[imageView.widthAnchor constraintEqualToConstant:160].active = YES;
[imageView.heightAnchor constraintEqualToConstant:44].active = YES;
self.navigationItem.titleView = imageView;
}
Ou définir le mode d'aspect comme aspectFit
-(void) updateNavTitleView{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
[imageView setContentMode:UIViewContentModeScaleAspectFit];
self.navigationItem.titleView = imageView;
}
Si vous voulez regarder la session, Session 204
Si quelqu'un avait besoin de faire ce qui précède dans Swift (4.2):
notez la fonction ci-dessous:
func addMiddleImage(){
//Initialize your UIImage
let yourImage = UIImage(named: "imageName")!.withRenderingMode(.alwaysOriginal)
//Initialize a UIImageView
let imageView = UIImageView(image: yourImage)
//Set your Navigation Bar to the inialized UIImageView
self.navigationItem.titleView = imageView
}
ajoutez-le à votre rappel ViewDidLoad ():
override func viewDidLoad() {
super.viewDidLoad()
self.addMiddleImage()
}
Bonne chance
essaye ça :
UIImage *logo = [UIImage imageNamed:@"logo.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage: logo];
imageView.frame = CGRectMake(160, 2, 40, 40);
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo];
UIImageView *navbarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
navbarImageView.contentMode = UIViewContentModeScaleAspectFit;
self.navigationBar.titleView = navbarImageView;