为什么我无法使 UITabBarController 变得模糊?

问题描述 投票:0回答:5

我有一个

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)

然后标签栏可见,但不模糊。我想从这里实现接受的答案的效果透明 UITabBar 上的黑色背景但这里是 uitabbar 并且我正在使用 uitabbarcontroller...你能帮我在我的情况下应用模糊吗?

swift uitabbarcontroller uistoryboard uitabbar
5个回答
6
投票

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

self.view.addSubview(blurView)

由于您只想将选项卡栏变为蓝色,并且此类是选项卡栏控制器,因此您可以执行以下操作:

self.tabBar.addSubview(blueView)

您还需要更改框架:

blurView.frame = self.tabBar.bounds

4
投票

为什么不在你的

TabBarController
上使用 barTintColor 属性?

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

您甚至不需要子类化

UITabBarController
。您可以在任何
UIViewController
上拨打此电话。

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

4
投票

如果我从您发布的以下评论中理解正确,您想将

UITabBar
更改为黑色,但仍然模糊。

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

从 iOS 7 开始,这样做实际上变得相当容易。只需将

barStyle
UITabBar
更改为
.black
。将以下代码放入您的
UIViewController
viewDidLoad
方法中(请注意,
UITabBar
默认情况下是半透明的,因此您无需再次指定)。

tabBarController?.tabBar.barStyle = .black

如果您想将其设置回常规的白色

barStyle
,请将其改回
.default

tabBarController?.tabBar.barStyle = .default

您甚至可以在 Interface Builder 中执行此操作,方法是选择

UITabBarController
层次结构中的选项卡栏并将其 Style 更改为 Black

Tab Bar Style


4
投票

我有一个解决方案,您只需按如下方式配置 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: .regular) // here you can change blur style
let blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = tabBar.bounds
blurView.autoresizingMask = .flexibleWidth
tabBar.insertSubview(blurView, at: 0)

结果:

result


1
投票

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

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

Hello!

© www.soinside.com 2019 - 2024. All rights reserved.