设置约束后获取正确的帧

时间:2015-04-24 18:03:09

标签: ios objective-c swift autolayout nslayoutconstraint

我有一个方法可以根据我UIImageView的当前帧创建一个遮罩层,它按照我的预期工作。但是,在一种情况下,我在UIImageView方法中修改viewWillAppear的高度约束,然后将掩码创建者应用于UIImageView,这将创建一个具有worng大小的掩码。所以我的问题是,我如何强制获得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

1 个答案:

答案 0 :(得分:1)

将框架保持在layoutSubiews始终是理想的。来自Apple开发人员UIKit doc

“layoutSubviews - 如果您需要对子视图的布局进行更精确的控制,请执行此方法,而不是约束或自动调整行为提供的。”

话虽如此,您最好的选择可能是为您的自定义UIImageView创建一个子类,并在layoutSubviews中插入您的重构逻辑。这将确保您的视图和蒙版始终正确构图。