2015-11-20 35 views
10

Sto cercando di rendere uno sfondo sfocato lo UITabBar per il mio UITabViewController e l'idea è di renderlo sfocato e trasparente in modo che le viste sottostanti possano essere viste scorrendo per.Sfondo nero su UITabBar trasparente

Purtroppo non posso per la vita di me ottenere la barra delle schede per essere trasparente. Indipendentemente da ciò che faccio, c'è sempre uno sfondo nero nella barra delle schede che impedisce la visualizzazione dei controller di visualizzazione sottostanti.

Se cambio l'alfa del UITabBar a qualcosa di basso posso vedere che la Tableview è davvero dietro di esso, ma si può vedere che il UITabBar ha una sorta di sfondo ad esso che impedisce il Tableview da completamente mostrando attraverso (e non voglio bloccare gli elementi dei pulsanti per essere invisibili, solo lo sfondo della barra delle linguette).

alpha 0.3 tab bar

Come può essere?

Secondo la barra delle schede personalizzate fatto carico che ho:

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 

e nel AppDelegate ho:

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 

... yeah E 'eccessivo, ma voglio provare tutto.

Qualche idea su cosa fare?

+0

hanno hai provato questo? http://stackoverflow.com/questions/20979281/ios-7-tabbar-translucent-issue –

+0

@johnykumar sì, la barra delle schede è impostata su traslucida ma non viene ancora visualizzato nulla. – Josh

+0

Quindi vuoi che la barra delle schede sia completamente trasparente? O traslucido con una sfocatura? – JAL

risposta

32

Fai un UITabBar trasparente

Assegnare un'immagine chiara alla sua backgroundImage. È possibile utilizzare un clear.png 1x1, o crearne uno a livello di codice:

self.backgroundImage = UIImage.imageWithColor(UIColor.clearColor()) 

Questo renderà il UITabBar trasparente:

Transparent

Aggiungere un effetto di sfocatura

Inserire un UIVisualEffectView come la sottoview più arretrata.

let frost = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) 
frost.frame = self.bounds 
self.insertSubview(frost, atIndex: 0) 

Questo inserirà un UIBlurEffect (gelo):

Frost

Esempio

Frosty toolbar


  1. Impostare la classe personalizzata per UITabBar del controller della barra delle schede su FrostyTabBar.
  2. Hai alcune opzioni per fornire un'immagine clearColor. È possibile creare un chiaro.png immagine con un alfa di 0. Una soluzione elegante programmatica è described here.
  3. Se si utilizza un clear.png, assegnarlo alla Immagine di sfondo nel Attribute Inspector: enter image description here
  4. In Interface Builder, raccogliere Stile: predefinito & traslucido.
  5. Una volta che hai preso il controllo della sfocatura dello sfondo con un UIVisualEffectView, puoi a tua volta fornire qualsiasi UIVisualEffect che desideri.

L'intera classe FrostyTabBar si presenta così:

import UIKit 

class FrostyTabBar: UITabBar { 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     let frost = UIVisualEffectView(effect: UIBlurEffect(style: .light)) 
     frost.frame = bounds 
     frost.autoresizingMask = .flexibleWidth 
     insertSubview(frost, at: 0) 
    } 
} 

► Trova questa soluzione su GitHub e dettagli aggiuntivi, tra cui un clear.png 1x1 su Swift Recipes.

+0

MIO UOMO! Ha funzionato perfettamente! Penso che il problema era che stavo impostando l'immagine di sfondo su "zero" che ha portato allo sfondo "nero". L'impostazione dell'immagine di sfondo su un'immagine chiara 1x1 ha funzionato come un incantesimo. – Josh

+0

Grazie grazie grazie grazie :) – Josh

+0

Grazie mille per questo! – rbiard

0

ho trovato una soluzione di prefetto, avete solo bisogno di sottoclasse UITabBar e poi fare le seguenti azioni per pulire che le opinioni fastidiosi

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

imageWithColor è stato sostituito da jotImage

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