web-dev-qa-db-fra.com

Supprimer la bordure inférieure de la barre de navigation iOS 7

Existe-t-il un moyen de supprimer la bordure inférieure que iOS7 affiche automatiquement sous la barre de navigation?

36
Gnamm

Si je vous comprends bien essayez

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
45
muffe

Cela ne fonctionne pas sur iOS7 avec une navigation translucide ou non ...

Une pâte issue de la documentation Apple;

La description L'image d'ombre à utiliser pour la barre de navigation . La valeur par défaut est nil, ce qui correspond à l'image fantôme par défaut. Si non-nil, cette propriété représente une image d'ombre personnalisée à afficher à la place de la valeur par défaut. Pour qu'une image d'ombre personnalisée soit affichée, une image d'arrière-plan personnalisée doit également être définie avec la méthode setBackgroundImage: forBarMetrics:. Si l'image d'arrière-plan par défaut est utilisée, elle sera utilisée quelle que soit la valeur de cette propriété.

Donc, en gros, vous devez implémenter ce setBackgroundImage . Remarque complémentaire , sur iOS7, vous n'utiliserez plus l'apparence, mais vous modifierez la barre de navigation dans le contexte de viewController où vous vous trouvez maintenant.

C'est:

    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];

Dans mon cas, je mets cela dans viewDidLoad (un comportement personnalisé peut être ajouté pour chaque UIViewController dans UINavigationViewController).

48
wolffan

basé sur muffed2k répondre + programmation Thomas commenter, C’est ce que j’utilise pour montrer UINavigationBar sans image de fond (ios5.1/6.0) et sans bordure inférieure (ios7.0):

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6)
    {
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    }else
    {
        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    }
12
user1105951

Si vous utilisez Swift et que vous rencontrez cette question, essayez ceci dans votre ViewController principal:

override func viewDidLoad() {
    super.viewDidLoad()

    /// ...

    navigationController?.navigationBar.shadowImage = UIImage();
    navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)

    //...
}

Basé sur la réponse de @ wolffan ci-dessus

6
A Fader Darkly

Pour moi, cela a fonctionné sous iOS 7 à 9+ lorsque translucent est défini sur false

UINavigationBar.appearance().transluscent = false
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
4
Matthieu Riegler

Je sais qu'il existe déjà une réponse acceptée à cela, mais une autre façon de le faire est de définir clipToBounds sur true.

Voici la seule ligne de code pour le faire dans Swift

self.navigationController?.navigationBar.clipsToBounds = true

Travaillé pour moi comme un charme.

2
user5209290

Fonctionne comme un charme: Swift version 3.x

    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
1

pour l'Objectif C

self.navigationController.navigationBar.clipsToBounds = YES;
1
Aftab

Si vous ciblez iOS 7 et que not définissez une image d'arrière-plan, cela fonctionnera:

        CGFloat navigationBarWidth = self.navigationController.navigationBar.frame.size.width;
        CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
        CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;

        UIGraphicsBeginImageContextWithOptions(CGSizeMake(navigationBarWidth, navigationBarHeight + statusBarHeight), NO, 0.0);
        UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault];

        //the following line takes away the border but only works if a background image is set (above)
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

J'ai eu l'idée de la réponse de @ muffe2k et ce SO post .

0
kraftydevil