这是一个 xy 问题:您错误地识别了问题。您在代码中添加的图像视图始终在所有设备上显示相同的大小。问题在于另一个图像视图,即您通过情节提要添加的图像视图:即在不同设备上更改大小的图像视图。原因是:这就是你告诉它要做的事情,你的自动调整大小设置看起来像这样(我直接从你发布的项目中获取了这个给我看):

我将分两个阶段证明这一点。首先,我们只说代码中添加的图像视图。这是我的科学测试代码(它在 Swift 中,但我相信你可以阅读它):
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
for i in stride(from: 0, to: 500, by: 100) {
let v = UIView(frame:CGRect(
x: CGFloat(i), y: 20, width: 10, height: 50))
v.backgroundColor = .black
self.view.addSubview(v)
}
let im = UIImage(named:"bullwinkle2.jpg")!
let iv = UIImageView(frame:CGRect(
x: 0, y: 50, width: im.size.width, height: im.size.height))
iv.image = im
self.view.addSubview(iv)
}
}
你看到我在做什么了吗?首先,我用间隔 100 像素的黑色子视图构建了一种“标尺”。然后我创建图像视图并添加它,指定图像的宽度和高度。
这是它在 iPhone 5s 模拟器上的样子:

这是它在 iPhone X 模拟器上的样子:

如您所见,它们都显示相同大小的图像:图像的宽度正好在两个设备上的第三个标记处(图像必须正好是 200 像素宽)。
好,进入第二阶段。现在,我将在情节提要中添加一个图像视图,在水平和垂直方向使用内部弹簧的自动调整大小设置:

现在我将在 iPhone 8 模拟器上再次运行相同的代码:

这两个图像看起来大小相同,因为我在 Storyboard 中设计的界面是在为 iPhone 8 调整视图大小时设计的。
好的,但现在让我们在 iPhone 5s 模拟器上再次运行:

啊哈!由于自动调整大小设置,故事板图像更小。所以你看,并不是代码图像太大了;这是故事板图像有时太小了。
最后说明:您的最终目标是在代码中创建与故事板中的图像视图相同大小的图像视图。但是这并不总是有效的原因是您已经将该代码放入viewDidLoad
中,这为时过早。在自动调整大小生效之前,您不知道情节提要图像视图的大小,这意味着viewDidLayoutSubviews
必须调用它。这发生在之后viewDidLoad
。