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

我创建了一个简单的UI ImageView,具有以下约束:

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))

重要的一个是最后一个,它将宽度设置为等于图像视图的高度,图像视图的高度由顶部和底部锚定义.

现在看起来很完美(见下图)

example image view

但是,在设置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)>

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

解决方法

尝试降低内容压缩/拥抱.我认为(纠正我,如果我错了)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)

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...