web-dev-qa-db-fra.com

Comment supprimer l'ombre interne de UINavigationBar dans iOS 7?

Exemple d'ombre intérieure

J'essaie de placer la barre de navigation en dessous de l'autre pour la faire ressembler à une barre de navigation haute. Mais dans iOS 7, UINavigationBar a maintenant une ombre interne en haut et en bas. J'ai vraiment besoin de l'enlever. Mais je n'ai trouvé aucune solution. Il semble que l'ombre soit préréditée, mais en réalité, elle apparaît lentement environ 0,4 seconde après l'affichage de la vue.

J'ai presque tout essayé mais l'ombre est toujours là. J'ai enlevé la ligne horizontale sous la barre avec ce code:

for (UIView *view in [[[self.navigationController.navigationBar subviews] objectAtIndex:0] subviews]) {
     if ([view isKindOfClass:[UIImageView class]]) view.hidden = YES;
}

Mais je n'arrive pas à comprendre comment supprimer l'ombre. Merci beaucoup!

J'ai essayé ceci:

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

Mais ce code ne supprime même pas la ligne horizontale sous la barre (cette méthode nécessite une image d'arrière-plan personnalisée). J'utilise Xcode Version 5.0 (5A11365x)

21
TOVVV

La ligne "horizontale" au bas de la barre de navigation est simplement shadowImage . Vous pouvez simplement la supprimer en appliquant une UIImage..__ vide. Selon la documentation, vous devez également définir une image d'arrière-plan personnalisée:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the background and shadow image to get rid of the line.
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
}
56
Thyraz

Je ne devrais vraiment pas, comme CaptJak l’a souligné, mais pour tous ceux qui sont bloqués: 

for (UIView *view in self.navigationController.navigationBar.subviews) {
    for (UIView *view2 in view.subviews) {
        if ([view2 isKindOfClass:[UIImageView class]]) {
            [view2 removeFromSuperview];
        }
    }
}

enter image description here

21
Rambatino

Dans Swift (testé sur iOS9)

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController!.navigationBar.shadowImage = UIImage()
8
user3903523

Vous pouvez facilement utiliser cette catégorie UInavigationBar appelée UINavigationBar-Addition trouvé ici J'ai utilisé la solution décrite dans ce answer mais je n’ai pas pu supprimer la ligne 1Px sous navigationBar.

0
Mohamed Saleh

J'avais un problème similaire: je voulais supprimer la ligne 1px et l'ombre de la barre de navigation sur iOS7 . Dans mon cas, j'avais besoin d'une ligne verte épaisse de 3 points au bas de la barre de navigation.

S'il existe une solution pour supprimer la ligne 1px au bas de la barre de navigation qui ne nécessite pas de traverser des sous-vues, je ne sais pas, mais il existe un moyen d'ajouter une vue qui masque cette ligne comme suit moins la couleur de la ligne peut être changée de cette façon).

UIView * bgView = [[UIView alloc] initWithFrame:CGRectMake(0, navBarHeight, navBarWidth, 1)]; // Dont use magic numbers in your code
bgView.backgroundColor = //some other color
[navigationBar addSubview:bgView];
[navigationBar setShadowImage:nil];
0
Aurelien Cobb

Si votre application prend uniquement en charge iOS 6.0+, vous pouvez simplement ajouter la ligne ci-dessous:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[[UINavigationBar appearance] setShadowImage:[UIImage new]];
...
}
0
ZYiOS