Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIImageView框架与其中的缩放UIImage相同(具有纵横比匹配)_Ios_Swift_Uiimageview - Fatal编程技术网

Ios UIImageView框架与其中的缩放UIImage相同(具有纵横比匹配)

Ios UIImageView框架与其中的缩放UIImage相同(具有纵横比匹配),ios,swift,uiimageview,Ios,Swift,Uiimageview,我使用的是UIImageView,内容模式设置为Aspect-FitUIImageView可以正确调整我的图像大小,但在调整大小后,即使没有设置任何约束,它也不会更改自己的帧 我需要的是: 我需要UIImageView根据内部图像调整自己的帧大小。我已经在情节提要上配置了图像视图 我需要在视图中再次布局其他对象,因为UIImageView的大小已更改 我所尝试的: 我创造了: UIViewController(白色背景)→ UIImageView(灰色背景)→ 里面的样本图像 约束:前导和尾随

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

我需要的是:
  • 我需要
    UIImageView
    根据内部图像调整自己的帧大小。我已经在情节提要上配置了图像视图
  • 我需要在视图中再次布局其他对象,因为UIImageView的大小已更改
  • 我所尝试的: 我创造了:

    • UIViewController(白色背景)→ UIImageView(灰色背景)→ 里面的样本图像
    • 约束:前导和尾随约束设置为零,Y约束设置为垂直对齐UIImageView
    如您所见,在正确缩放图像后,UIImageView的帧仍然具有不正确的大小(灰色背景)

    我已尝试手动设置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()
    
    即使我将在
    viewdilayoutsubviews()
    调用UIImageView大小计算,其他约束仍然使用旧的UIImageView大小

    问题
  • 如何正确更改UIImageView的大小?也许我不需要代码就能做到?也许我需要玩拥抱/压缩?我试过一些东西,但没有成功
  • 如何强制视图重新计算其他约束,以便它们使用新的UIImageView大小?例如,我可以将红方块放在UIImageView的顶部,但在我的方法调整UIImageView的大小后,红方块仍将位于旧UIImageView的位置

  • 宽度长的矩形图像无法缩放到高度长的帧。如果您想剪切一些图像,您可以选择使用
    scaledSpectFill
    ,如果您不介意纵横比是否失真,您可以选择使用另一个
    contentMode
    设置。@sdadas,我很满意纵横比匹配,我只需要消除顶部和底部边框=垂直调整UIImageView的大小。但我有其他的限制,所以。坏消息。虽然这里不是我的第一个答案()的完全副本,但我的建议已经足够接近了——要么更改您正在处理的规格,要么尝试将图像视图的背景设置为透明。当然,这是可以做到的。但是,如果您试图根据UIImageView的图像动态调整其大小,那么您将面临一个主要的难题。一个宽度长的矩形图像无法缩放到一个高度长的帧。如果您想剪切一些图像,您可以选择使用
    scaledSpectFill
    ,如果您不介意纵横比是否失真,您可以选择使用另一个
    contentMode
    设置。@sdadas,我很满意纵横比匹配,我只需要消除顶部和底部边框=垂直调整UIImageView的大小。但我有其他的限制,所以。坏消息。虽然这里不是我的第一个答案()的完全副本,但我的建议已经足够接近了——要么更改您正在处理的规格,要么尝试将图像视图的背景设置为透明。当然,这是可以做到的。但是,在尝试根据UIImageView的图像动态调整UIImageView大小的过程中,您会遇到一些令人头疼的问题。