Pour ce faire, vous devez définir une coutume image de l'ombre. Mais pour l'image de l'ombre pour être montré, vous devez également définir une image de fond personnalisée, devis à partir de la documentation d'Apple:
Pour une mesure image de l'ombre pour être montré, image de fond personnalisée doit
également être configuré avec le setBackgroundImage:forBarMetrics: la méthode. Si l'
arrière-plan par défaut l'image est utilisée, par défaut, à l'ombre de l'image sera
être utilisé indépendamment de la valeur de cette propriété.
Donc le code est:
UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"]
forBarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
[navigationBar setShadowImage:[UIImage new]];
Ce code suppose que vous voulez que l'image nommée "NavigationBarBackground" comme fond de la barre.
Si ce n'est pas le cas, vous pouvez rendre le fond d'une couleur unie en définissant backgroundImage
de [UIImage new]
et en attribuant navigationBar.backgroundColor
à la couleur que vous aimez.
Ci-dessus est le seul "officiel" de façon à le cacher. Mais malheureusement, il supprime la barre de translucidité.
Comment garder la barre translucide?
Pour garder la translucidité vous avez besoin d'une autre approche, il ressemble à un hack, mais fonctionne bien. La racine des cheveux, nous essayons de supprimer est - UIImageView
quelque part en UINavigationBar
. Nous avons donc de le trouver et de l'afficher ou la masquer en cas de besoin.
La première déclarer la variable d'instance:
@implementation MyViewController {
UIImageView *navBarHairlineImageView;
}
Puis, en viewDidLoad
faire:
navBarHairlineImageView = [self findHairlineImageViewUnder:navigationBar];
Méthode qui trouve l'affichage de l'image dont nous avons besoin:
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
return (UIImageView *)view;
}
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self findHairlineImageViewUnder:subview];
if (imageView) {
return imageView;
}
}
return nil;
}
Et cela va faire le reste de la magie:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
navBarHairlineImageView.hidden = YES;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
navBarHairlineImageView.hidden = NO;
}
Même méthode de travail pour l' UISearchBar
racine des cheveux.
Merci beaucoup @Leo Natan pour l'idée originale!
P. S. Si vous masquer cette ligne pour mettre de la vue en dessous de la barre de navigation, vous pouvez le rendre translucide trop, alors il sera flou parfaitement avec la barre de navigation. Voir iOS-blur par exemple (non officiel encore) de le faire.