web-dev-qa-db-fra.com

iOS UITabBar: Supprimer la ligne de dégradé d'ombre supérieure

J'ai implémenté un UITabBar personnalisé et j'ai toujours ce dégradé/ombre au-dessus. J'ai ajouté

[self.tabBar setBackgroundImage:[UIImage imageNamed:@"navBarBottom.png"]]; 

qui change simplement l’arrière-plan tout en gardant le dégradé de l’ombre.

Qu'est-ce que je fais mal ? Y a-t-il quelque chose à préciser pour s'en débarrasser?

Ce que j'ai :

top shadow

Ce que je veux : 

without shadow

Je vous remercie.

37
httpete

Essayez de définir une image ombrée transparente de 1x1 pixel pour UITabBar:

[[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparentShadow.png"]];
36
Brian Liang

Similarité en réponse pour cette question ... si vous ne voulez pas jouer avec une image transparente 1x1, cela fonctionne aussi:

[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; 
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

En rapide:

UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()
115
JakubKnejzlik

Rapide

Essayez ceci pour votre barre d'onglets personnalisée. Il va cacher la ligne d'ombre horizontale.

self.tabBar.setValue(true, forKey: "_hidesShadow")

Objectif c

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];
16
Sourabh Sharma

Swift 4

UITabBar.appearance().layer.borderWidth = 0.0
UITabBar.appearance().clipsToBounds = true
5
Alfi

Il suffit de définir une image pour ne pas supprimer la ligne d’ombre; vous devez définir sa valeur pour borderWidth sur 0. Voici le code

[[Apparence UITabBar] setShadowImage: [UIImage new]];

[Apparence UITabBar] .layer.borderWidth = 0.0f;

[Apparence UITabBar] .clipsToBounds = true;

2
Nazim Siddiqui

Voici une autre réponse facile à implémenter:

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];

Travaillé pour moi.

2
dbv

Placez ceci dans votre AppDelegate sous didFinishLaunchingWithOptions :

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];
1
DocAsh59

L'appel de [[UITabBar appearance] setShadowImage:] permettra de personnaliser toutes les instances UITabBar de votre application. 

Si vous souhaitez personnaliser une seule UITTabBar, procédez comme suit: 

[self.tabBarController.navigationController.navigationBar setShadowImage:[UIImage new]];
1
Eric

Essayez ceci sur viewDidload.

override func viewDidLoad() {
        super.viewDidLoad()

        self.tabBar.setValue(true, forKey: "_hidesShadow")
}

Ça marche pour moi

0
anhtran

Dans votre contrôleur de vue ou les contrôleurs de vue ou BasicViewController dont la plupart des contrôleurs de vue héritent dans viewDidLoad, placez simplement ces 2 lignes:

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tab_bar_background"]];
[[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparent_shadow"]];

Assurez-vous que [email protected] est une image 1x1 ou 2x2 transparente et que [email protected] est une image 640x100 car la barre inférieure mesure 50 pixels de haut.

Fonctionne sur iOS 9.3

0
Catalin

Essayez ceci, ** Objective-C **

//Remove shadow image by assigning nil value.
[[UITabBar appearance] setShadowImage: nil];

// or 

// Assing UIImage instance without image reference
[[UITabBar appearance] setShadowImage: [[UIImage alloc] init]];

** Rapide **

//Remove shadow image by assigning nil value.
UITabBar.appearance().shadowImage = nil

// or 

// Assing UIImage instance without image reference
UITabBar.appearance().shadowImage = UIImage()


Voici les recommandations de Apple pour shadowImage .

@available(iOS 6.0, *)
open var shadowImage: UIImage?

La valeur par défaut est zéro. Si non nil, une image d'ombre personnalisée à afficher à la place de l'image de l'ombre par défaut. Pour qu'une ombre personnalisée soit affichée, utilisez une personnalisation L’image d’arrière-plan doit également être définie avec -setBackgroundImage: (si l’image d’arrière-plan par défaut .__ est utilisée, l’ombre par défaut sera utilisée).

0
Krunal