我有一种方法可以根据UIImageView的当前帧创建遮罩层,该方法可以按预期工作。但是,在一种情况下,我在UIImageView方法中修改了viewWillAppear的高度约束,然后将蒙版创建者应用于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-如果您需要对子视图的布局进行比约束或自动调整大小行为所提供的更为精确的控制,请实施此方法。”

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

10-05 23:00
查看更多