Lorsque je navigue entre les contrôleurs parent et enfant dans un contrôleur de navigation maître - détail, je vois une ombre sombre sur le côté droit de la barre de navigation en haut. Cela a commencé après la mise à niveau vers Xcode 5.1. Cela semble dur et distrayant. Comment puis-je m'en débarrasser?
91
darkColor
vue soit toujours présente et provoque ce problème.réparé
la source
navigationController.view.backgroundColor = .white
ne fonctionne plus sur iOS 11.navigationController.view.backgroundColor = .white
fonctionne sur iOS 12. La suppression de translucide de la barre de navigation ne peut pas être utilisée lorsque cela est nécessaire, mais l'ombre noire ne l'est pas.La réponse de nonamelive est parfaite. Pour obtenir la même chose dans Interface Builder ET TOUJOURS GARDER LA TRANSLUCENCE , sélectionnez le contrôleur de navigation et définissez un attribut d'exécution défini par l'utilisateur
view.backgroundColor
comme indiqué dans la capture d'écran (dans l'inspecteur d'identité). Répétez pour tous les contrôleurs de navigation qui présentent ce problème.Il semble que tout ce problème se produit parce que la couleur noire (ou en fait, aucune couleur) de UINavigationController fuit au moment où CoreGraphics prend des instantanés au début de l'animation. Donc, le régler sur blanc empêchera cela.
la source
UINavigationController
activé, pas sur le viewController.Cela semble être un bogue introduit dans iOS 7.1. Dans mon cas, cela est causé par une UIToolbar placée directement sous la barre de navigation. L'ombre sombre apparaît également dans la barre d'onglets translucide.
L'ombre semble être causée par la vue d'arrière-plan de la UIToolbar. J'utilise maintenant cette solution de contournement dans le contrôleur de vue avec la barre d'outils qui masque la vue d'arrière-plan de la barre d'outils pendant la transition:
Ceci est le code pour
[UIView findViewRecursively:]
J'ai déposé ce radar: http://openradar.appspot.com/16418845
la source
backgroundView
.[self.toolbar valueForKey:@"_backgroundView"]
. Veuillez noter qu'il s'agit d'une API privée, mais je pense que vous ne serez pas attrapé par Apple car ce_backgroundView
n'est qu'un nom générique.Cela semble se produire avec n'importe quelle barre (TabBar ou ToolBar) translucide.
Donc, une façon de résoudre ce problème est de définir le
_tabBar.translucent = NO;
(dans mon cas). Cela empêche l'ombre indésirable sous la barre de navigation supérieure tout en laissant la barre de navigation translucide. Malheureusement, la barre inférieure n'est plus translucide.Il peut être remis à translucide, mais tout cela doit se produire une fois que toute l'animation de poussée est terminée, donc la commutation de cette propriété est bien perceptible.
Au cas où, cependant, la barre inférieure doit également être translucide et je ne veux pas que l'utilisateur voie le changement, je l'ai résolu avec ce qui suit:
Ensuite, dans le
viewDidAppear:
je retourne simplement cela:Il y a juste un petit changement dans l'apparence en particulier, mais c'est à peine perceptible et c'est bien mieux que d'avoir l'ombre sous la barre de navigation.
J'espère que cela aidera les autres à garder les barres translucides jusqu'à ce qu'Apple corrige ce comportement car les barres SONT censées être cachées dans certains cas contrairement à ce qui a été suggéré dans d'autres articles, en particulier pour le
UITabBar
la source
view.backgroundColor
de votre UITabBarController dans le storyboard et définissez-le sur une couleur blanche.Cela fonctionne pour moi dans Swift
Dans
AppDelegate
ledidFinishLaunchingWithOptions
mode, je mets ceci:la source
Cela fonctionne pour moi sur iOS 13 avec des thèmes clairs et sombres ainsi que sur les anciennes versions d'iOS.
Ajoutez le code suivant à AppDelegate à la
application(didFinishLaunchingWithOptions)
méthode:la source
Voici ma variante ... elle nécessite beaucoup moins de code que la réponse de Tom, et est plus efficace. C'est SI vous voulez une barre de navigation translucide et que vous voulez également résoudre ce problème d'ombre.
Dans le ViewController source (qui est intégré au contrôleur de navigation) ...
et
Le résultat est le même que ce que fait Tom (visuellement, pour l'utilisateur final), et est plus facile à mettre en œuvre. J'espère que cela t'aides...
la source
Cela fonctionne pour moi, placez-le dans la fonction où vous poussez le nouveau ViewController
la source
Ce qui suit fonctionne également et laisse la barre de navigation transparente:
[UIApplication sharedApplication].keyWindow.backgroundColor = [UIColor whiteColor];
la source
Bien que ce ne soit pas la même chose que l'implémentation iOS d'origine, c'est un bon moyen de résoudre le problème:
Vous obtiendrez une belle animation de fondu entrant / sortant de la barre d'onglets. Ajoutez le code à la racine
UIViewController
.la source
Ou si vous utilisez le générateur d'interface, vous pouvez simplement sélectionner la barre de navigation à partir de votre contrôleur de navigation et décocher la case Translucide entre le style et la teinte de la barre dans l'inspecteur d'attributs pour vous débarrasser de cet effet étrange -
la source