将子视图添加到模糊视图

Adding subview to a blurred view

        if !UIAccessibilityIsReduceTransparencyEnabled() {
            self.blurOutletTop.backgroundColor = UIColor.clear

            let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)

            let blurEffectView = UIVisualEffectView(effect: blurEffect)
            blurEffectView.frame = self.blurOutletTop.bounds
            blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

            self.view.addSubview(blurEffectView)

            //self.logoOutlet.addSubview(blurEffectView)

        }
        else {
            self.view.backgroundColor = UIColor.black
        }
    }

我在屏幕顶部附近有一个 UIView 大小的导航栏。上面的代码为其添加了模糊效果。我想做的是将我的导航按钮添加到视图顶部,这样它们就不会模糊,但是仅通过故事板执行此操作会导致按钮也变得模糊。

我读到将按钮的插座作为子视图添加到 blurEffectView 会将按钮放在顶部,但是当我取消注释时

self.logoOutlet.addSubview(blurEffectView)

blurOutletTop 的位置被重新定位,按钮的背景模糊但标签文本没有,按钮本身被重新定位。我试过添加约束,但也没有帮助。

让我的按钮/图像覆盖在我的 blurTopOutlet 之上的最简单方法是什么?

我在代码中对 UIVisualEffectView 进行了子类化,然后将各种控件作为子视图添加到其中。非常好的效果。由于视图层次结构期望,不确定是否可以通过 IB 100% 完成。

  • (1) 在IB中创建"main"视图并添加约束。这里的替代方法是我所做的,子类 UIVisualEffectView。
  • (2) 在代码中创建"main"视图子视图,将它们添加到"main"视图中,并在代码中添加约束。
  • (3) 由于您希望某些操作与某些子视图(UIButtons)相关联,因此还要确保为它们编写 addTarget(target:for:) 调用代码。

添加编辑:您可以通过 IB 完成其中的大部分工作。设置一切,因为 UIButtons 是你模糊视图的子视图,尝试使用 bringSubview(ToFront:)。如果可行,那可能会容易得多! (我是守旧派,更喜欢编码。)

将您不想模糊的按钮和其他视图添加到 blurEffectView.contentView:

blurEffectView.contentView.addSubview(someButton)