web-dev-qa-db-fra.com

Fond noir sur UITabBar transparent

J'essaie de rendre un arrière-plan flou la UITabBar de ma UITabViewController, et l'idée est de le rendre flou et transparent de manière à ce que les vues ci-dessous défilent.

Malheureusement, je ne peux pas pour la vie obtenir que la barre d'onglets soit transparente. Quoi que je fasse, il y a toujours un fond noir dans la barre d’onglet qui empêche les contrôleurs de vue sous-jacents de s’exprimer.

Si je modifie l'alpha de UITabBar par quelque chose de bas, je peux voir que la table est bien derrière, mais vous pouvez voir que la UITabBar a une sorte d'arrière-plan qui empêche la table de voir complètement (et je ne le fais pas). vous ne voulez pas que les éléments des boutons soient invisibles, mais simplement l’arrière-plan de la barre d’onglet). 

 alpha 0.3 tab bar

Comment se peut-il?

La vue de la barre d'onglets personnalisée s'est chargée, j'ai:

self.tabBar.translucent = true
self.tabBar.alpha = 0.3
self.tabBar.backgroundColor = UIColor.clearColor().colorWithAlphaComponent(0.0)
self.tabBar.layer.backgroundColor = UIColor.clearColor().colorWithAlphaComponent(0.0).CGColor
self.tabBar.backgroundImage = nil
self.tabBar.shadowImage = nil

et dans le AppDelegate j'ai:

UITabBar.appearance().barTintColor = UIColor.clearColor()
UITabBar.appearance().tintColor = kColorAccent
UITabBar.appearance().translucent = true
UITabBar.appearance().translucent = true
UITabBar.appearance().backgroundColor = UIColor.clearColor()
UITabBar.appearance().backgroundImage = nil
UITabBar.appearance().layer.backgroundColor = UIColor.clearColor().CGColor
UITabBar.appearance().shadowImage = nil

... ouais C'est excessif mais je veux tout essayer.

Une idée de ce qu'il faut faire?

12
Josh

imageWithColor a été remplacé par jotImage

let size = CGSize(width: tabBar.bounds.size.width,
                  height: tabBar.bounds.size.height)
tabBar.backgroundImage = UIImage.jotImage(with: UIColor.clear, size: size)
0
Adela

J'ai trouvé une solution de préfet, il vous suffit de sous-classer UITabBar, puis d'effectuer les opérations suivantes pour nettoyer les vues gênantes.

class MainTabBar: UITabBar {
    var cleanDone = false

    override func layoutSubviews() {
        super.layoutSubviews()
        self.deleteUnusedViews()
    }

    func deleteUnusedViews() {
        if !self.cleanDone {
            var removeCount = 0
            for (_, eachView) in (self.subviews.enumerate()) {
                if NSStringFromClass(eachView.classForCoder).rangeOfString("_UITabBarBackgroundView") != nil {
                    eachView.removeFromSuperview()
                    removeCount += 1
                }
                if NSStringFromClass(eachView.classForCoder).rangeOfString("UIImageView") != nil {
                    eachView.removeFromSuperview()
                    removeCount += 1
                }
                if removeCount == 2 {
                    self.cleanDone = true
                    break
                }
            }
        }
    }
}
0
Dicky Tsang

la seule solution qui a fonctionné pour moi était la suivante:

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

et réglez: (vous pouvez le faire aussi dans le storyboard)

UITabBar.appearance().barTintColor = UIColor.clear

mais ce que je dois définir dans le storyboard, c'est:

  • onglet: translucide -> vrai
0
Skyborg