【问题标题】:How can I add a fullscreen image for iPhone X to xcassets (not a launch image)?如何将 iPhone X 的全屏图像添加到 xcassets(不是启动图像)?
【发布时间】:2018-07-24 00:47:03
【问题描述】:

我的横向应用中有一张背景图片,它覆盖了整个屏幕。我像往常一样使用@1x、@2x 和@3x 将它添加到xcassets。

在除 iPhone X 之外的所有设备上,图像都能正确显示。但是,由于 iPhone X 的纵横比与其他 iPhone 不同,因此在侧面进行了裁剪。如果我选择 Aspect Fill,它会被拉伸并且看起来很差。

我已经以正确的 iPhone X 宽高比创建了一个额外的背景图像,但是如何将它添加到 xcassets 中?只有@1x、@2x 和@3x 的选项。我错过了什么吗?

(我必须强调这不是启动图像 - 它是图像视图中的图像,用作我应用程序上所有屏幕的背景)。

编辑

对于其他为此苦苦挣扎的人,感谢 the4kman 的帮助,我就是这样做的:

override func viewDidLayoutSubviews() {
    // Work out aspect ratio to show correct background image
    let imageWidth = background.bounds.width
    let imageHeight = background.bounds.height
    let aspectRatio = imageWidth / imageHeight

    if aspectRatio >= 2.0 {  // iPhone X ratio is 2.16, other iPhones are 1.77
        background.image = UIImage(named: "background-X")
    } else {
        background.image = UIImage(named: "background")
    }
}

【问题讨论】:

  • 我认为您在计算纵横比时交换了宽度和高度。如果您要与2.0 的纵横比值进行比较,则公式应为let aspectRatio = imageHeight / imageWidth

标签: ios xcode iphone-x xcasset


【解决方案1】:

不能在一个图片资源中包含不同纵横比的图片。如果您想专门针对 iPhone X,您应该添加不同的资产。给它一个后缀以将其与原始图像区分开来(例如“-x”)。

【讨论】:

  • 感谢您的回答。所以我目前有一个名为“背景”的资产,添加了 1x、2x 和 3x。如果我添加另一个名为“background-x”的资产并将新图像添加到 3x 框,如果图像视图加载“背景”,我如何将其加载到图像视图中?
  • @Eatton 您应该通过访问视图的边界来检查当前视图是否具有 2:1 的纵横比,并在运行时相应地更改图像视图的图像。
  • 我明白你在说什么,但是当我执行 myImage.bounds.width 时,无论它在什么设备上运行,它总是返回 568。如何获得宽度和高度来计算纵横比?
  • @Eatton 您确定在布局设置后检索了图像的大小吗?尝试通过viewDidLayoutSubviews 访问它。
  • 啊,是的,做到了。我试图检测 viewDidLoad 中的纵横比。感谢您的所有帮助!
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多