web-dev-qa-db-fra.com

Contrôle de la taille / position de UINavigationItem titleView

Dans mon application, j'ai des titres personnalisés (avec un lettrage qui n'est pas une police) stockés dans pngs que je veux mettre comme titre de ma navigation. Je veux que le lettrage dans les titres soit tous de la même taille pour chaque contrôleur de vue différent, donc dans l'illustrateur, j'ai travaillé à le faire tous de la même taille et de la même largeur (offrant un espace vide pour tenir compte des chaînes plus courtes). Je fais ce qui suit:

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = titleImageView;
[titleImageView release];

Et il semble que l'image soit arbitrairement redimensionnée et positionnée en fonction des éléments inclus sur chaque navigationBar (c'est-à-dire bouton retour, bouton droit, etc.).

Je me demande, comment puis-je prendre le contrôle de titleView pour que je puisse lui faire implémenter la taille et la position que je veux et qu'il ne soit pas arbitrairement redimensionné/repositionné.

22
Ser Pounce

Au lieu d'utiliser votre vue d'image comme vue de titre, créez une autre vue qui contient la vue d'image. Définissez that view comme vue de titre de l'élément de navigation; vous êtes maintenant libre d'ajuster le cadre de la vue de l'image dans la vue du titre.

44
Jeff Kelley

Vous pouvez contrôler la taille et la position de la vue des titres UINavigationbar. Ne définissez pas l'imageview comme titleview directement. Au lieu de cela, créez une UIView personnalisée, puis définissez son cadre selon vos besoins et ajoutez votre titleImageView comme sous-vue.

UIView *backView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];// Here you can set View width and height as per your requirement for displaying titleImageView position in navigationbar 
[backView setBackgroundColor:[UIColor greenColor]];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.frame = CGRectMake(45, 5,titleImageView.frame.size.width , titleImageView.frame.size.height); // Here I am passing Origin as (45,5) but can pass them as your requirement. 
[backView addSubview:titleImageView];
//titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = backView;

J'espère que cela vous aide.

31
Nishant Tyagi

Dans Swift, vous pouvez le faire comme ceci:

    var titleView = UIView(frame: CGRectMake(0, 0, 100, 40))
    var titleImageView = UIImageView(image: UIImage(named: "cocolife"))
    titleImageView.frame = CGRectMake(0, 0, titleView.frame.width, titleView.frame.height)
    titleView.addSubview(titleImageView)
    navigationItem.titleView = titleView
12
user3109460

Code Swift4 mis à jour:

    var titleView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 40))
    var titleImageView = UIImageView(image: UIImage(named: "headerlogo"))
    titleImageView.frame = CGRect(x: 0, y: 0, width: titleView.frame.width, height: titleView.frame.height)
    titleView.addSubview(titleImageView)
    navigationItem.titleView = titleView
0