为什么我不能让我的UITabBarController模糊?

时间:2016-10-06 17:35:32

标签: swift uitabbarcontroller uistoryboard uitabbar

我有UITabBar,我想让它变得模糊。我写了以下代码:

import UIKit

class TabBarController:UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let blur = UIBlurEffect(style: UIBlurEffectStyle.Light)
        let blurView = UIVisualEffectView(effect: blur)
        blurView.frame = self.view.bounds
        blurView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        self.view.layer.insertSublayer(blurView, atIndex: 0)
    }

}

但不知何故最后一行抛出错误:

  

无法将'UIVisualEffectView'类型的值转换为预期参数   输入'CALayer'

我该如何解决?

我将最后一行改为:

self.tabBar.addSubview(blurView)

但现在整个标签栏都模糊不清(即使有图标也不可见)。当我将此行更改为:

self.tabBar.sendSubviewToBack(blurView)

然后标签栏可见,但不会模糊。我希望从这里Black background on transparent UITabBar接受答案来实现效果,但这里是uitabbar,我正在使用uitabbarcontroller ......你可以帮助我在我的情况下应用模糊吗?

5 个答案:

答案 0 :(得分:6)

您只需将模糊视图添加为子视图:

self.view.addSubview(blurView)

由于您只想使标签栏变蓝并且此类是标签栏控制器,您可以执行以下操作:

self.tabBar.addSubview(blueView)

您还需要更改框架:

blurView.frame = self.tabBar.bounds

答案 1 :(得分:3)

如果我从您发布的以下评论中正确理解,您希望将UITabBar更改为黑色但仍然模糊。

  

是的,我注意到UITabBarController在默认情况下是模糊的,但我想用特定的样式(.Dark)使其模糊。

这样做,因为iOS 7实际上变得非常简单。只需将barStyle的{​​{1}}更改为UITabBar即可。将以下代码放入.black UIViewController方法中(请注意,默认情况下viewDidLoad是半透明的,因此您无需再次指定)。< / p>

UITabBar

如果您想将其重新设置为常规白色tabBarController?.tabBar.barStyle = .black ,请将其更改回barStyle

.default

您甚至可以在Interface Builder中通过选择tabBarController?.tabBar.barStyle = .default 层次结构中的标签栏并将其样式更改为黑色来执行此操作

Tab Bar Style

答案 2 :(得分:3)

为什么不在TabBarController使用barTintColor属性?

self.tabBar.translucent = true
self.tabBar.barTintColor = UIColor.blackColor()

您甚至不需要继承UITabBarController。您可以在任何UIViewController上调用此内容。

self.tabBarController?.tabBar.translucent = true
self.tabBarController?.tabBar.barTintColor = UIColor.blackColor()

答案 3 :(得分:0)

我有一个解决方案,您所需要做的就是将UITabBar配置如下:

// next code will make tabBar fully transparent

tabBar.isTranslucent = true
tabBar.backgroundImage = UIImage()
tabBar.shadowImage = UIImage() // add this if you want remove tabBar separator
tabBar.barTintColor = .clear 
tabBar.backgroundColor = .black // here is your tabBar color
tabBar.layer.backgroundColor = UIColor.clear.cgColor

如果要添加模糊,请执行以下操作:

let blurEffect = UIBlurEffect(style: .dark) // here you can change blur style
let blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = tabBar.bounds
blurView.autoresizingMask = .flexibleWidth
tabBar.insertSubview(blurView, at: 0)

结果:

result

答案 4 :(得分:0)

将底部约束附加到视图底部而不是安全区域

这可能不是 TabBar 的问题,而是 tableView 约束的问题。 默认情况下,标签栏是模糊的。

Hello!