在透明UITabBar的黑背景

Jos*_*osh 14 uitabbarcontroller ios ios9

我试图做一个模糊的背景UITabBar对我UITabViewController,这种想法是有它变得模糊,透明,这样的观点下可以看到滚动的.

不幸的是,我不能为我的生活让标签栏变得透明.无论我做什么,标签栏总会有一些黑色背景,阻止底层视图控制器显示.

如果我将alpha的alpha更改为UITabBar低,我可以看到tableview确实在它后面,但你可以看到它UITabBar有某种背景,阻止tableview完全显示(我不想要禁止按钮项目不可见,只是标签栏背景).

alpha 0.3标签栏

怎么会这样?

在自定义标签栏的视图中我确实加载了:

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
Run Code Online (Sandbox Code Playgroud)

在AppDelegate我有:

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
Run Code Online (Sandbox Code Playgroud)

...是的它太过分但我想尝试一切.

关于该怎么做的任何想法?

Swi*_*ect 44

使UITabBar透明

为其分配清晰图像backgroundImage.您可以使用1x1 clear.png,或以编程方式创建一个:

self.backgroundImage = UIImage.imageWithColor(UIColor.clearColor())
Run Code Online (Sandbox Code Playgroud)

这将使UITabBar透明:

透明

添加模糊效果

插入a UIVisualEffectView作为最后面的子视图.

let frost = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
frost.frame = self.bounds
self.insertSubview(frost, atIndex: 0)
Run Code Online (Sandbox Code Playgroud)

这将插入UIBlurEffect(霜):

霜

冷淡的工具栏


  1. 设置自定义类UITabBar标签栏控制器来FrostyTabBar.
  2. 您有几个选项来提供clearColor图像.您可以创建一个alpha为0 的clear.png图像.这里描述了一个程序化的优雅解决方案.
  3. 如果使用clear.png,将其分配给背景图像属性检查器: 在此输入图像描述
  4. 在Interface Builder中,选择Style:Default&Translucent.
  5. 一旦你用a控制背景模糊UIVisualEffectView,你就可以反过来提供任何UIVisualEffect你想要的东西.

整个FrostyTabBar班级看起来像这样:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

►在GitHub上找到此解决方案以及其他详细信息,包括Swift Recipes上的1x1 clear.png .

  • 我找不到与UIImage关联的方法(`imageWithColor`),但我确实用`CIImage`看到它. (2认同)