web-dev-qa-db-fra.com

Changer la hauteur de UINavigationBar

Quelqu'un peut-il me dire comment changer la hauteur de la barre de navigation? 

Voici ce que j'ai jusqu'à présent:

CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
22
Oceandrive

Vous pouvez créer une classe de catégorie basée sur UINavigationBar comme ceci

fichier .h

#import UIKit/UIKit.h    
@interface UINavigationBar (myNave)
- (CGSize)changeHeight:(CGSize)size;
@end

et fichier .m

#import "UINavigationBar+customNav.h"
@implementation UINavigationBar (customNav)
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,100);
    return newSize;
}
@end

Cela fonctionne très bien.

25
Shimon Wiener

Vous ne devez pas modifier la hauteur de la barre de navigation . Dans Apple Programing Guide on View Controller:

Personnalisation de l'apparence de la barre de navigation

Dans une interface de navigation, un contrôleur de navigation possède son objet UINavigationBar et est responsable de sa gestion. Il est interdit de modifier l'objet de la barre de navigation ou de modifier directement ses limites, son cadre ou ses valeurs alpha. Cependant, il est possible de modifier certaines propriétés, notamment:

● propriété barStyle

● propriété translucide

● propriété tintColor

(extrait de Apple: https://developer.Apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html )

- UPDATE - IOS 7 --- seules les propriétés disponibles peuvent encore être modifiées, mais vous trouverez ci-dessous un excellent didacticiel expliquant comment obtenir de la flexibilité dans la barre de navigation http://www.appcoda.com/customize -navigation-status-bar-ios-7/

21
Gil Margolin

sizeThatFits: ne fonctionne plus avec les sous-classes iOS11 UINavigationBar. Apple Engineering a confirmé que cette technique n'avait jamais été prise en charge et qu'avec iOS11, la taille de l'utilisateur n'est plus consultée.

7
ghr

J'ai résolu ce problème, j'ai créé la sous-classe de UINavigationController. Dans ce fichier MainNavigationViewController.m, je réécris la méthode viewDidLayoutSubviews (), où je définis le cadre pour self.navigationBar.

7
Yerkezhan

Essayez d'utiliser -

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
6
Cliff Viegas

Remplacez - (void) la méthode viewWillAppear dans le viewController et essayez le code ci-dessous,

- (void)viewWillAppear {

UINavigationBar *navigationBar = [[self navigationController] navigationBar];
CGRect frame = [navigationBar frame];
frame.size.height = 82.0f;
[navigationBar setFrame:frame];
}
6
Augustine P A

La solution la plus simple et efficace consiste à ajouter une catégorie à la barre de navigation. (mais peut-être pas la meilleure solution)

@interface UINavigationBar (CustomHeight)

@end


@implementation UINavigationBar (CustomHeight)

- (CGSize)sizeThatFits:(CGSize)size {
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    return CGSizeMake(screenRect.size.width, kNavBarHeightNoStatus);
}
@end

knavBarHeightNoStatus est la hauteur de votre barre de navigation. Nous utilisons les limites UIScreen car le cadre de UINavigationBar est incorrect

PS: Attention, vous pouvez avoir des problèmes si vous l’utilisez avec un SideMenu

4
Beninho85

self.navigationController.navigationBar.frame est une propriété readonly sur iOS version 4.x

il sera changé même si, vous verrez un comportement anormal.

par exemple, lorsque l'état de l'application est passé en arrière-plan et revient au premier plan, la barre de navigation affiche la hauteur d'origine 

3
tachikoma

J'ai rencontré beaucoup de problèmes en fonction de la méthode choisie. Dans mon cas particulier, la barre de navigation était masquée dans l'ensemble de l'application, à l'exception du contrôleur de vue des paramètres. Comme j'avais besoin de spécifier une hauteur personnalisée de la barre de navigation et d'afficher la barre de navigation en même temps, la séparation entre le contrôleur de vue source et le contrôleur de vue de paramètres avait une animation très bâclée. 

La meilleure solution absolue peut être trouvée ici: https://Gist.github.com/maciekish/c2c903d9b7e7b583b4b2 . Je viens d'importer la catégorie dans le contrôleur de vue de paramètres, et dans viewDidLoad a appelé la méthode setHeight: sur `self.navigationController.navigationBar '. C'est génial!

2
Josh Gafni

Le code suivant n’affectera pas les autres paramètres du cadre, sauf la hauteur.

 [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.Origin.x, self.navigationController.navigationBar.frame.Origin.y, self.navigationController.navigationBar.frame.size.width, 150)];

si vous voulez changer d’autres paramètres, il vous suffit d’éditer l’un quelconque des paramètres ....

1
abdul sathar

Créer une catégorie et redéfinir sizeThatFits (_ size: CGSize) -> CGSize method modifie la taille de UINavigationBar dans l'ensemble de l'application. En supposant que vous souhaitiez modifier la hauteur/la taille de UINavigationBar uniquement dans un ViewController particulier (dans mon cas)

Voici comment je l'ai fait.

extension UINavigationBar {
    open override func sizeThatFits(_ size: CGSize) -> CGSize {
        let v = self.value(forKey: "frame") as? CGRect
        return v?.size ?? CGSize(width: UIScreen.main.bounds.width, height: 44)
    }
}

dans l'appelant ViewController ressemblerait à

override func viewDidLoad() {
    super.viewDidLoad()
    configureNavigationBar()
}

private func configureNavigationBar() {
    var naviBarFrame = self.navigationController?.navigationBar.frame
    naviBarFrame?.size.height = 74
    let rect = naviBarFrame ?? CGRect(x: 0, y: 20, width: UIScreen.main.bounds.width, height: 74)
    self.navigationController?.navigationBar.setValue(rect, forKey: "frame")
}
0
Chamira Fernando

Essayez ce code dans- (void)viewDidLayoutSubviewsmethod,

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
0
Group