【问题标题】:Getting correct frame after setting constraint设置约束后获取正确的帧
【发布时间】:2015-04-24 18:03:08
【问题描述】:

我有一种方法可以根据我的UIImageView 的当前帧创建一个遮罩层,它可以按我的预期工作。但是,在一种情况下,我在viewWillAppear 方法中修改了UIImageView 的高度约束,然后将遮罩创建器应用于UIImageView,这将创建一个具有磨损尺寸的遮罩。所以我的问题是,我怎样才能强制获得 UIImageView 的修改后的正确框架?

现在我得到的高度是 105 的 140,但是如果我在设置约束后使用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

【问题讨论】:

  • 我尝试将大部分框架保留在 layoutSubviews 中。您是否尝试过在那里设置框架,以便在需要重新构建视图时对其进行更新?
  • @joels 我尝试设置其框架的视图不是 UIView 的子类,因此很遗憾在 layoutSubviews 中设置不可用。
  • 如何添加掩码以及如何更新其约束。
  • @sahara108 我更新了我的问题。
  • 好吧,我帮不上忙,因为我不知道你是如何设置你的 imageViewlayer 的。我唯一能说的是,您需要一种方法来知道您的imageView 框架何时更改并通知更新layer 的框架。我建议你在视图控制器的viewDidLayoutSubviews 中更新layer 的框架

标签: ios objective-c swift autolayout nslayoutconstraint


【解决方案1】:

最好将框架保存在layoutSubiews 中。来自苹果开发者 UIKitdoc

"layoutSubviews - 如果您需要比约束或自动调整大小行为提供的更精确的子视图布局控制,请实施此方法。"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2017-06-14
    • 2019-07-28
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多