Existe-t-il un moyen de supprimer la bordure inférieure que iOS7 affiche automatiquement sous la barre de navigation?
Si je vous comprends bien essayez
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
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).
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];
}
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
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)
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.
Fonctionne comme un charme: Swift version 3.x
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
pour l'Objectif C
self.navigationController.navigationBar.clipsToBounds = YES;
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 .