模糊的 UIImageView 大小问题

Posted

技术标签:

【中文标题】模糊的 UIImageView 大小问题【英文标题】:Blurred UIImageView Sizing Problems 【发布时间】:2017-06-07 19:20:11 【问题描述】:

我展示的 UIViewController 有一个 UIImageView,即backgroundImageView,作为 VC 的背景并设置为填充整个屏幕。

我希望 UIImageView 呈现由 ios 提供的深色模糊效果,但是当我第一次呈现视图控制器时,会暂时出现以下尺寸问题(在设备上但不在模拟器上):

内部viewDidLoad()

// `locationImage` is passed during the segue
backgroundImageView.image = locationImage
backgroundImageView.contentMode = .scaleAspectFill

let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = backgroundImageView.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
backgroundImageView.addSubview(blurEffectView)

以上视图控制器的modalPresentationStyle设置为currentContext

如果我暂时移除模糊效果,我会看到我提供给视图控制器的背景图像已正确设置。但是,一旦应用了模糊效果,尺寸问题就会立即出现。

究竟是什么原因造成的?

【问题讨论】:

您是否考虑过使用自动布局而不是设置框架和自动调整蒙版?如果你坚持使用这种方法而不是将 .frame 设置为 .bound 创建一个原点为 0,0 且大小为 bounds.size 的 CGRect。 @UpholderOfTruth 实际上没有。我以前没有考虑过使用 AutoLayout。虽然我只是尝试过,没有任何回报。还是一样的效果。另外,当您说bounds.size 时,您到底是什么意思? 这样做:blurEffectView.frame = CGRect(x: 0, y: 0, width: bounds.size.width, height: bounds.size.height)。您能否编辑问题以显示自动布局。 是的,但到底是什么界限?我尝试了视图的边界,但又遇到了同样的问题。 对不起,我的意思是 backgroundImageView.bounds 只是明确地将原点 x 和 y 设置为零。失败可能是 backgroundImageView 本身的框架不正确。 【参考方案1】:

尝试在viewWillLayoutSubviews()viewDidLayoutSuviews()内设置blurEffectView的框架

here你可以找到更多关于viewcontroller生命周期的信息

【讨论】:

对不起,我忘记了这一点,但我之前尝试过这两种方法都没有运气。起初,我也认为这是一个视图生命周期问题,但没有任何改变。还是同样的问题。

以上是关于模糊的 UIImageView 大小问题的主要内容,如果未能解决你的问题,请参考以下文章

图像未绑定到UIImageView

动态调整 UITableViewCells 的大小

为啥 uiimageview 的 contentmode 不起作用?

使用 CGAffineTransform 使用 UIViewContentModeTop 缩放 UIImageView

将 UIImageView 添加到 UIButton

.AllowUserInteraction 不适用于 UIImageView