gpt4 book ai didi

ios - 在 iPhone X、Xs 上以编程方式加载时,图像会变大吗?

转载 作者:行者123 更新时间:2023-11-28 23:39:30 25 4
gpt4 key购买 nike

有没有人遇到过在 iPhone X、Xs 上以编程方式加载图像时渲染变大的问题?

如果我在 Storyboard 中添加图像,它会正确调整大小,但是如果我以编程方式加载它,它会显得更大。我正在使用 Xcode 10.1。我已经尝试了 launch.storyboard 和启动图像来验证我是否正确访问了 iPhone X、Xs。

图像在 XsMax 和 XR 上正确加载。我知道 X,Xs 以不同方式呈现像素。这是单张图片,我没有使用@2x、@3x 等...

如果我在 Storyboard View 中放置一个 UIImageView 元素,并且它的框架矩形是 (3,95) 和 (130x253),图像在 Storyboard和我运行模拟器时看起来是正确的。如果我加载相同的图像但以编程方式执行,例如:

UIImageView *dot =[[UIImageView alloc] initWithFrame:CGRectMake(3,95,130,253)];
dot.image=[UIImage imageNamed:@"apple.png"];
[TestView addSubview:dot];

以编程方式显示的 UIImageView 看起来比 130x253 大。也许大 1/3?

谢谢

最佳答案

这是一个 x-y 问题:您错误地识别了问题。您在代码中添加的 ImageView 在所有设备上始终显示相同的大小。问题是其他 ImageView ,即您通过 Storyboard添加的 ImageView :那个 是在不同设备上更改大小的 ImageView 。原因是:这就是你告诉它要做的,你的自动调整大小设置,看起来像这样(我直接从你发布的项目中拿来让我看):

enter image description here


我将分两个阶段证明这一点。首先,我们只讨论在代码中添加的 ImageView 。这是我的科学测试代码(它在 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 像素的黑色 subview 构建了一种“标尺”。然后我创建 ImageView 并添加它,指定图像的宽度和高度。

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

enter image description here

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

enter image description here

如您所见,它们都显示相同尺寸的图像:图像的宽度恰好位于两个设备上的第三个标记处(图像必须恰好为 200 像素宽)。


好的,进入第二阶段。现在,我将在 Storyboard中添加一个 ImageView ,在水平和垂直方向上使用内部带有 Spring 的自动调整大小设置:

enter image description here

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

enter image description here

这两个图像看起来大小相同,因为我在为 iPhone 8 调整 View 大小时在 Storyboard 中设计了界面。

好的,但现在让我们在 iPhone 5s 模拟器上再次运行:

enter image description here

啊哈!由于自动调整大小设置, Storyboard图像较小。所以你看,并不是代码图像太大了;而是因为代码图像太大了。这是 Storyboard图像有时太小了。


最后说明:您的最终目标是在代码中创建与从 Storyboard中输出的 ImageView 大小相同的 ImageView 。但是 that 并不总是有效的原因是您将该代码放入 viewDidLoad 中,这太早了。在自动调整大小生效之前,您不知道 Storyboard ImageView 的大小,这意味着必须调用 viewDidLayoutSubviews。这比 viewDidLoad 发生。

关于ios - 在 iPhone X、Xs 上以编程方式加载时,图像会变大吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53898893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com