为不同的设备/分辨率使用不同的图像,例如如何使用波浪号 (~) 来区分 iPhone 和 iPad?

Posted

技术标签:

【中文标题】为不同的设备/分辨率使用不同的图像,例如如何使用波浪号 (~) 来区分 iPhone 和 iPad?【英文标题】:Use different images for different devices/resolutions like how you use the tilde (~) to differentiate between iPhones and iPads? 【发布时间】:2017-03-24 00:44:22 【问题描述】:

This answer 解释了如何标记资产,以便您可以在代码中使用相同的文件名(例如,“Button.png”),Xcode 会根据设备是 iPhone 还是 iPad 自动选择正确的图像。

您只需要使用波浪号 (~)。

是否有类似的惯例来区分不同的设备?例如,我们需要为 4S 和 7+ 提供不同的图像。现在,我们在代码中检查设备的高度并相应地更改文件名,但这感觉很hackish。

【问题讨论】:

您绝对应该考虑使用资产目录。您甚至可以包含可缩放(PDF,不幸的是不是 SVG)图像 @Paulw11 是的,当然!但这仍然不能解决不同设备的不同图像尺寸(不同尺寸,而不是分辨率)的问题。比如4S和7的宽高比不同。 不,恐怕没有任何神奇的方法可以做到这一点。通常,最好尝试通过约束和自动布局构建自适应 UI,并在运行时根据需要缩放图像,但如果您需要像素完美的放置,那么您可能只需要继续做您正在做的事情。 @Paulw11 好的,谢谢。能否请您作为答案发布,以便获得信用? 【参考方案1】:

我想出的最接近的是使用DeviceKit 并在 xcassets 中创建 2 个条目。 AppLogo 有 2x 和 3x 图像。 AppLogoSmall 为“小屏幕设备”提供 2x 图像。我的应用是新的,所以我不需要担心 5 岁以下的 iPhone。

    let titleImage: UIImage?
    //get the device
    let device = Device()

    //list of small screen devices
    let smallScreenDevices: [Device] = [.iPhone5, .iPhone5c, .iPhone5s, .iPhoneSE, .simulator(.iPhone5), .simulator(.iPhone5c), .simulator(.iPhone5s), .simulator(.iPhoneSE)]

    //check if device has small screen
    if device.isOneOf(smallScreenDevices)
        titleImage = UIImage.init(named: "AppLogoSmall")
    
    else
        titleImage = UIImage.init(named: "AppLogo")
    

    let titleImageView = UIImageView.init(image: titleImage)
    titleImageView.contentMode = .scaleAspectFit
    //titleImageView.contentMode = .scaleAspectFill

    navigationItem.titleView = titleImageView

【讨论】:

还需要支持4S设备吗? 没有。适用于 ios 10 +

以上是关于为不同的设备/分辨率使用不同的图像,例如如何使用波浪号 (~) 来区分 iPhone 和 iPad?的主要内容,如果未能解决你的问题,请参考以下文章

如何在煎茶触摸中添加不同屏幕分辨率的图像?

如何实现不同分辨率的图像

解析 ios 的图像分辨率

iOS - 基于设备的不同图像或缩放相同的图像?

根据设备的大小限制图像的下载

如何获取点在UIImageView上的点的坐标,使它们在所有设备(不同大小/分辨率)上的相同位置?