Plus tôt, j'utilisais iOS 6.1 pour mon projet. Récemment, je suis passé à iOS 7. Pour, beaucoup de changements que je connaissais, j'ai mis à jour mon code .. Mais j'ai observé un comportement étrange. Ma vue sur chaque écran est masquée sous la barre de navigation. La vue de repositionnement résout le problème pour iOS7, mais crée des problèmes pour les anciennes versions d'iOS.
Quelqu'un peut-il m'expliquer, quelle est la raison et pourquoi cela se produit-il ?? Qu'est-ce qui a été changé dans iOS 7 qui cause ce problème ??
Toute aide serait appréciée..
Essayez navigationBar.translucent = NO;
, C'est YES
par défaut dans iOS7.
Il est également bon de jeter un œil à cette partie de la documentation de UINavigationBar
:
Nouveau comportement sur iOS 7. La valeur par défaut est OUI. Vous pouvez forcer un arrière-plan opaque en définissant la propriété sur NO. Si la barre de navigation a une image d'arrière-plan personnalisée, la valeur par défaut est déduite des valeurs alpha de l'image — OUI si elle a un pixel avec alpha <1.0 Si vous envoyez setTranslucent: OUI à une barre avec une image d'arrière-plan personnalisée opaque, elle s'appliquera une opacité du système inférieure à 1,0 pour l'image. Si vous envoyez setTranslucent: NO à une barre avec une image d'arrière-plan personnalisée translucide, elle fournira un arrière-plan opaque pour l'image à l'aide de la barre barTintColor si définie, ou noir pour UIBarStyleBlack ou blanc pour UIBarStyleDefault si barTintColor est nul.
Modifier :
La définition de la valeur "navigationBar.translucent" provoque une exception si vous exécutez le projet sur des appareils/simulateurs ayant des versions iOS plus anciennes.
Vous pouvez donc ajouter une vérification de version comme celle-ci:
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0)
{
navigationBar.translucent = NO;
}
Une autre option serait de définir:
vc.edgesForExtendedLayout = UIRectEdgeNone;
Swift 3 :
vc.edgesForExtendedLayout = []
Vous pouvez arrêter vos vues sous la barre de navigation, dans votre viewController:
self.edgesForExtendedLayout = UIRectEdgeNone;
Swift 3 +:
self.edgesForExtendedLayout = []
Si vous n'avez pas besoin d'une barre de navigation translucide dans votre application, vous pouvez résoudre ce problème sur iOS7 et iOS6 sans modifications de code.
Dans le storyboard, sélectionnez votre contrôleur de navigation, puis ouvrez "Inspecteur des attributs". Ensuite, sous "Mesures simulées", définissez "Barre supérieure" sur une certaine valeur mais pas sur "translucide":
Maintenant, vos vues sur iOS6 et iOS7 auront le même positionnement qu'auparavant.
Le point # 7 sur cette liste fait l'affaire. Vous devez toujours l'envelopper dans un code de vérification iOS 7 comme la réponse de @ null:
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0) {
viewController.edgesForExtendedLayout = UIRectEdgeNone;
}
L'article entier est utile à ceux qui passent à iOS 7.
Utilisez cette propriété pour votre VC, afin d'éviter le chevauchement de la barre d'état ur avec votre VC Swift:
self.edgesForExtendedLayout = []
Objectif c
self.edgesForExtendedLayout = UIRectEdgeNone;
Recherchez cette clé: UIViewControllerBasedStatusBarAppearance
.
Il est utilisé dans le fichier PLIST d'informations de votre application et apparaîtra comme:
Afficher l'apparence de la barre d'état basée sur le contrôleur
Cela vous permettra de contrôler l'apparence de la barre d'état. Il y a un tas de changements d'API pour les barres d'état, allez voir dans la documentation les nouvelles méthodes UIViewController
telles que
- (void)prefersStatusBarHidden;
Dans Swift 2.2, utilisez
self.edgesForExtendedLayout = .None
Pour moi, le meilleur moyen de transparence Navigation Bar
consiste à modifier l'ombreImage et l'arrière-planImage de la barre.
navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.backgroundColor = nil
navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navBarBackground")?.resizableImage(withCapInsets: .zero, resizingMode: .stretch), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()