设置约束后获得正确的框架

Getting correct frame after setting constraint

我有一种方法可以根据我 UIImageView 的当前帧创建遮罩层,效果如我所料。但是,在一种情况下,我在 viewWillAppear 方法中修改了 UIImageView 的高度约束,然后将掩码创建器应用于 UIImageView,这将创建一个大小不合适的掩码。所以我的问题是,我怎样才能强制获得 UIImageView 的修改后的正确框架?

现在我得到的高度是 140 而不是 105,但是如果我在设置约束后使用 layoutIfNeeded 它变成 118,更接近,但仍然不是 105。

更新:

我制作面具的方法:

public func setupMaskForImageView() {
    let mask = CALayer()
    let resizedMaskImage = resizeImage(UIImage(named: imageMaskName)!, newSize: frame.size)
    mask.contents = resizedMaskImage
    mask.frame = CGRectMake(0, 0, frame.size.width, frame.size.height)
    layer.mask = mask
    layer.masksToBounds = true
}

我用

修改了viewWillAppear中的约束
imageHeight.constant = UIScreen.mainScreen().bounds.width / 2.5

将您的框架保持在 layoutSubiews 中始终是理想的选择。来自 Apple 开发者 UIKit doc

"layoutSubviews - Implement this method if you need more precise control over the layout of your subviews than either the constraint or autoresizing behaviors provide."

也就是说,您最好的选择可能是为您的自定义 UIImageView 创建一个子类并在 layoutSubviews 中插入您的重构逻辑。这将确保您的视图和面具始终正确构图。