模糊效果没有填满整个View

Blur effect does not fill the entire View

我有一个具有全屏 UIImageView 的视图控制器。当控制器加载时,我只是在整个屏幕上设置了模糊效果。 UIImageView 的内容模式设置为 scaleAspectFill。我这样设置模糊效果:

@IBOutlet weak var previewImage: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
previewImage.image = userPhoto     
let blur = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
blur.frame = self.view.bounds
previewImage.addSubview(blur)
}

当我在 iPhone 6 上测试应用程序时,我得到了这个结果:

右边有一个偏移量,我不明白为什么。下面的图片如果正确全屏显示,但我可以获得模糊效果以适应它...

****已编辑****

我直接对 VC 的视图应用了模糊效果,现在它工作得很好,但我想知道为什么当我将子视图添加到 UIImage 视图时它不起作用...

我在这里看到两个可能的问题:

  1. 视图未在 viewDidLoad 舞台上布置。在这种情况下,您可以强制他们手动布局:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.layoutIfNeeded()
        ...
    }
    
  2. 您将子视图添加到 previewImage,而不是根视图。您必须检查您的故事板,或修复代码:

    override func viewDidLoad() {
         super.viewDidLoad()
         previewImage.image = userPhoto     
         let blur = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
         blur.frame = self.view.bounds
         self.view.insertSubview(blur, aboveSubview: previewImage)
     }
    

基于@kelin的回答。您甚至可以在界面中的图像上方添加模糊效果 builder.Just 在界面构建器的对象部分中搜索 Visual Effect View with Blur。然后在图像上方添加 Visual Effect View 视图。它也可以通过 Attributes inspector 完全自定义。这样你就可以确保模糊会占据整个屏幕。从架构的角度来看,它也更清晰,您不需要通过代码配置视图。