在标签栏上添加UIVisualEffectView

时间:2017-08-23 19:33:13

标签: ios swift

我正在尝试使用UIVisualEffectView创建模态弹出窗口作为其背景。我希望UIVisualEffectView位于标签栏上,但我看不到实现它的方法。

这就是我所做的,但这不是我想要的输出:

var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
visualEffectView.frame = self.view.bounds
tabBarController?.view.addSubview(visualEffectView)

//Also tried like this
self.view.window?.addSubview(visualEffectView)

这正是我所寻找的:

enter image description here

所以我的问题是,我应该如何将UIVisualEffectView添加到标签栏上作为子视图。我知道我可以创建另一个viewController并将其显示为.OverCurrentContext但这对我来说不是解决方案。

2 个答案:

答案 0 :(得分:2)

我重现了将visualEffectView添加到UITabBarController的主视图的问题。对于非半透明标签栏视图,控制器视图不会在其下方扩展,因此高度比您需要的要短。

解决问题更改

visualEffectView.frame = self.view.bounds

为:

visualEffectView.frame = self.tabBarController!.view.bounds

答案 1 :(得分:0)

您可以将其附加到视图层次结构中,但我不建议在生产应用中以这种方式执行此操作;视图堆栈更改(例如,旋转)时有足够的空间容纳错误和崩溃。它仍然完成了工作:

class tabBarController: UITabBarController {

    override func viewDidLayoutSubviews() {
        let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
        visualEffectView.frame = self.view.bounds
        let window = UIApplication.shared.keyWindow ?? UIApplication.shared.windows[0]
        window.subviews[0].addSubview(visualEffectView)
    }
}

你能做什么(争辩:应该)做的是创建一个自定义协议和委托,在需要时在每个标签栏的视图控制器上显示和隐藏你的模态视图(这些视图控制器又可以被子类化为处理代表)。