UIImageView框架与其中的缩放UIImage相同(使用Aspect Fit)

时间:2017-01-24 12:46:03

标签: ios swift uiimageview

我正在使用UIImageView 内容模式设置为 Aspect Fit UIImageView正确调整了我的图像大小,但即使没有设置约束,它也不会在调整大小后更改自己的帧。

我需要什么:

  1. 我需要UIImageView根据图片内部调整自己的帧。我在故事板上配置了图像视图。
  2. 我需要在视图中再次布局其他对象,因为UIImageView的大小已更改。
  3. 我尝试了什么:

    我创建了:

    • UIViewController(白色背景)→UIImageView(灰色背景)→里面的示例图像。
    • 约束:领先&尾部约束设置为零,Y约束设置为垂直对齐UIImageView。

    正如您在正确缩放图像后看到的那样,UIImageView的框架仍然具有不正确的尺寸(灰色背景)。

    /Users/sorix/Desktop/example.png

    我试图手动设置UIImageView大小:

        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
    
            let newSize = AVMakeRect(aspectRatio: backgroundImageView.image!.size, insideRect: backgroundImageView.frame)
            backgroundImageView.frame = newSize
        }
    

    在该示例代码中,我计算了图像大小并将帧大小设置为图像的大小。我不知道它是否更好,所以我不需要使用AVFoundation的方法。

    问题:其他对象放置不正确,因为UIImageView的大小已更改且约束现在无效。

    这些方法对我不起作用:

    self.view.setNeedsLayout()
    self.view.layoutIfNeeded()
    

    即使我在viewDidLayoutSubviews()调用我的UIImageView大小计算,其他约束仍然使用旧的UIImageView的大小。

    问题

    1. 如何正确更改UIImageView的大小?也许我可以在没有代码的情况下做到也许我需要玩Hugging / Compression?我尝试过但没有运气。
    2. 如何强制查看重新计算其他约束以便它们使用新的UIImageView大小?例如,我可以在UIImageView的顶部放置红色方块,但是在通过我的方法调整了UIImageView之后,红色方块仍然处于旧的UIImageView的位置。

0 个答案:

没有答案