我有一个具有全屏UIImageView的View控制器。当控制器加载时,我只是在整个屏幕上设置了模糊效果。 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上测试该应用程序时,我得到以下结果:

ios - 模糊效果无法填充整个 View-LMLPHP

右边有一个偏移量,我不知道为什么。下面的图片是否已正确全屏显示,但我可以得到模糊效果以适合它...

****编辑****

我直接将模糊效果应用于VC的视图,现在它可以正常工作,但是我想知道为什么在将子视图添加到UIImage视图时它不起作用...

最佳答案

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

  • 视图未在viewDidLoad阶段布置。在这种情况下,您可以强制他们手动进行布局:
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.layoutIfNeeded()
        ...
    }
    
  • 您将子视图添加到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)
     }
    
  • 07-25 22:47