Ios 设置UIImageView图像会影响布局约束

Ios 设置UIImageView图像会影响布局约束,ios,swift,uiimageview,Ios,Swift,Uiimageview,我正在创建具有以下约束的简单UIImageView: self.view.addConstraint(imageView.topAnchor.constraint(equalTo: contentLayoutGuide.topAnchor)) self.view.addConstraint(imageView.centerXAnchor.constraint(equalTo: contentLayoutGuide.centerXAnchor)) self.view.addConstraint(i

我正在创建具有以下约束的简单UIImageView:

self.view.addConstraint(imageView.topAnchor.constraint(equalTo: contentLayoutGuide.topAnchor))
self.view.addConstraint(imageView.centerXAnchor.constraint(equalTo: contentLayoutGuide.centerXAnchor))
self.view.addConstraint(imageView.heightAnchor.constraint(equalTo: contentLayoutGuide.heightAnchor))
self.view.addConstraint(imageView.widthAnchor.constraint(equalTo: contentLayoutGuide.heightAnchor))
最重要的是最后一个,它将宽度设置为图像视图的高度,并且图像视图的高度由顶部和底部锚点定义

现在这看起来很好(见下图)

但是,当设置
imageView.image
时,屏幕上到处都是图像,而且图像太大了。 此调试过程将修复此问题:

po for cn in self.imageView!.constraints { cn.isActive = false }
po CATransaction.flush()
这会使图像按预期的方式适合imageView,但在此之前,imageView会出现混乱

有趣的是,在设置图像之前,imageView本身没有任何约束,然后设置图像将创建这两个约束:

- 0 : <NSContentSizeLayoutConstraint:0x6040002b2120 UIImageView:0x7fa98f757b90.width == 488 Hug:250 CompressionResistance:750   (active)>
- 1 : <NSContentSizeLayoutConstraint:0x6040002b2180 UIImageView:0x7fa98f757b90.height == 487 Hug:250 CompressionResistance:750   (active)>
-0:
- 1 : 

这些约束似乎打破了它,因为禁用它们可以解决问题。它们仅在设置图像时添加

您的
UIImageView
是否将遮罩设置为边界?如果图像大于
UIImageView
,则默认情况下,它将超出边界

imageView.layer.masksToBounds = true

或者,您是否尝试过将
UIImageView的内容适合度更改为方面适合度,例如?

尝试降低内容压缩/拥抱度。我认为(如果我错了,请纠正我)UIImageView在默认情况下比UIView(251到250)具有更高的压缩/拥抱阻力。您可以尝试以下代码:

someImage.setContentHuggingPriority(UILayoutPriority(rawValue: 249), for: .horizontal)
someImage.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 249), for: .horizontal)
someImage.setContentHuggingPriority(UILayoutPriority(rawValue: 249), for: .vertical)
someImage.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 249), for: .vertical)

尝试将UIImageView的
clipsToBounds
属性设置为true并进行检查,因为对于少数contentMode选项,如果边界不足以填充内容,则图像将超出图像视图的边界。

您是否将
imageView
上的
TranslatesAutoResizengMaskinToConstraints
设置为
false
?当然可以。否则,默认情况下约束将被打破。您是否将图像视图的内容模式设置为aspect fit?使用.defaultLow(250)也可以,默认情况下,它似乎是.defaultHigh(750),导致此bugImage没有setContentHuggingPriority和setContentHuggingPriority。ImageView有。我有同样的问题,但在我的情况下,解决方案不起作用。在我的情况下,这是有效的。我有一个带有自动布局约束的tableviewcell视图,其中UIImageView放置在UILabels的左侧,并排放置在右侧。但不知何故,我的UILabel与UIImageView重叠了一些奇怪的边距。这个变通方法解决了我的问题。