我创建了一个简单的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 :(得分:6)
尝试降低内容压缩/拥抱。我认为(纠正我,如果我错了)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)
答案 1 :(得分:0)
你的UIImageView
屏蔽是否有界限?如果图像大于imageView.layer.masksToBounds = true
,则默认情况下它会超出边界
UIImageView
或者您是否尝试过将C#
的内容适合更改为Aspect Fit?
答案 2 :(得分:0)
尝试为UIImageView将clipsToBounds
属性设置为true并检查,因为对于少数contentMode选项,如果边界不足以填充内容,则图像超出图像视图的范围。