Ios 在iPhoneX、Xs上以编程方式加载图像时,图像会呈现更大?

Ios 在iPhoneX、Xs上以编程方式加载图像时,图像会呈现更大?,ios,iphone-x,iphone-xs,Ios,Iphone X,Iphone Xs,有没有人在通过编程方式加载到iPhoneX、Xs上时出现过图像渲染变大的问题 如果我在故事板中添加图像,它会正确调整大小,但是如果我以编程方式加载它,它会显得更大。我使用的是Xcode 10.1。我已经尝试了launch.storyboard和launch image来验证我是否正确访问了iPhoneX,Xs 图像正确加载到XsMax和XR上。我知道X,Xs渲染像素的方式不同。这是一个单一的图像,我不使用@2x、@3x等 如果我在序列图像板视图中放置UIImageView元素,其框架矩形为3,9

有没有人在通过编程方式加载到iPhoneX、Xs上时出现过图像渲染变大的问题

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

图像正确加载到XsMax和XR上。我知道X,Xs渲染像素的方式不同。这是一个单一的图像,我不使用@2x、@3x等

如果我在序列图像板视图中放置UIImageView元素,其框架矩形为3,95和130x253,则在序列图像板中以及运行模拟器时,图像看起来是正确的。 如果加载相同的图像,但以编程方式执行,例如:

UIImageView *dot =[[UIImageView alloc] initWithFrame:CGRectMake(3,95,130,253)];
dot.image=[UIImage imageNamed:@"apple.png"];
[TestView addSubview:dot];
以编程方式显示的UIImageView看起来大于130x253。也许大三分之一


谢谢你

这是一个x-y问题:你误认了问题所在。您在代码中添加的图像视图在所有设备上的大小始终相同。问题在于另一个图像视图,即通过故事板添加的图像视图:即在不同设备上更改大小的图像视图。原因是:这就是你告诉它要做的,你的自动调整大小设置,看起来像这样,我直接从你发布给我看的项目中得到:

我将分两个阶段证明这一点。首先,我们只讨论代码中添加的图像视图。这是我的科学测试代码,在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模拟器上再次运行相同的代码:

这两张图片看起来大小相同,因为我在为iPhone8调整视图大小时在故事板中设计了界面

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

啊哈!由于自动调整大小设置,情节提要图像较小。你看,这并不是因为代码图像太大了;这是因为故事板图像有时太小了


最后一点注意:您的最终目标是在代码中创建与故事板中的图像视图大小相同的图像视图。但这并不总是有效的原因是您已经将代码放入viewDidLoad中,这太早了。在自动调整大小生效之前,您不知道情节提要图像视图的大小,这意味着必须调用viewDidLayoutSubviews。这将在viewDidLoad之后发生。

谢谢。我试过了,但没用。我甚至在情节提要中放置了一个空白的UIImageView,并将点图像属性设置为匹配,但它不起作用。对于Ex:UIImageView*dot=[[UIImageView alloc]initWithFrame:cgrectMakeMakeMage1.frame.origin.x,image1.frame.origin.y,image1.frame.size.width,image1.frame.size.height];dot.image=[UIImage ImageName:@apple.png];[测试视图添加子视图:点];每7、8、8+、X、XS、XR正确调整空白。此方法适用于除X、Xs以外的所有尺寸。我将尝试这种方法。不,这是在主视图中。我只是说我有正确的启动图像/情节提要。请尝试在以编程方式添加的图像下方的情节提要中添加UIImageView。将其设置为“按比例填充”和“自动调整上/下箭头大小”是,否锚定。然后运行iPhoneX。以编程方式显示的图像大小将不同,至少对我来说是这样。谢谢你试着复制它。让我们来看看。