设置约束后获得正确的框架
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
中插入您的重构逻辑。这将确保您的视图和面具始终正确构图。
我有一种方法可以根据我 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
中插入您的重构逻辑。这将确保您的视图和面具始终正确构图。