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

Ios 对不同的设备/分辨率使用不同的图像,例如如何使用波浪线(~)区分iPhone和iPad?,ios,iphone,xcode,ipad,Ios,Iphone,Xcode,Ipad,解释如何标记资产,以便您可以在代码中使用相同的文件名(例如,“Button.png”),Xcode会根据设备是iPhone还是iPad自动选择正确的图像 您只需要使用波浪符号(~) 是否有类似的惯例来区分不同的设备?例如,我们需要为4S和7+提供不同的图像。现在,我们在代码中检查设备的高度,并相应地更改文件名,但这让人觉得有点黑客味。我想到的最接近的方法是在xcassets中使用并创建两个条目。AppLogo有2个和3个图像。AppLogoSmall的“小屏幕设备”的图像是2倍。我的应用程序是新

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

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


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

我想到的最接近的方法是在xcassets中使用并创建两个条目。AppLogo有2个和3个图像。AppLogoSmall的“小屏幕设备”的图像是2倍。我的应用程序是新的,所以我不需要担心少于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

您肯定应该考虑使用资产目录。您甚至可以包括可伸缩(PDF,而不是SVG)images@Paulw11是的,当然!但这仍然不能解决不同设备的不同图像大小(不同大小,而不是分辨率)的问题。例如,4S和7有不同的宽高比。不,恐怕没有什么神奇的方法可以做到这一点。通常,最好尝试通过约束和自动布局构建自适应UI,并在需要时在运行时缩放图像,但如果需要像素完美的放置,则可能只需要继续执行您正在执行的操作。@Paulw11好的,谢谢。你可以发布一个答案,这样你就可以获得积分了吗?你还需要支持4S设备吗?不,这是iOS 10的+