iOS优化App包体积时Assets.xcassets能否仅放3x图留空1x/2x
回答
核心结论
你完全可以只在Assets.xcassets的3x分类下放置占位图,留空1x、2x分类没有功能性副作用,也不要把这张图放到1x分类下,这种做法完全能满足你的包体积优化+占位图加载需求。
具体说明
- iOS的Asset Catalog自带资源降级匹配逻辑:设备加载图片时会优先查找和自身屏幕缩放系数匹配的资源,找不到对应规格时,会自动选取已存的最高规格资源做缩放适配,
UIImage(named:)方法可以正常返回适配后的图片对象,不会出现加载失败、返回空值导致的显示异常或者崩溃问题,你写的Kingfisher加载代码可以正常运行。- 目前主流在售的iPhone全是3x屏幕,会直接读取你放在3x分类的占位图,显示效果完全符合预期
- 少量还在服役的2x屏老设备(比如iPhone 6/7/8、初代iPhone SE等)、几乎没人用的1x屏古董设备找不到对应规格资源时,会自动缩放你存的3x占位图适配显示。你的占位图本身就是低分辨率的模糊过渡素材,系统自动缩放带来的显示差异几乎感知不到,完全不影响使用。
- 别把占位图放到1x分类:如果资源只存在1x分类下,3x设备加载时会把原图放大3倍渲染,本就低分辨率的占位图会出现极其明显的颗粒感、马赛克感,反而破坏占位阶段的观感。
可选小提示
你的占位图本身分辨率只有150*267,文件体积极小,如果追求全设备完全无缩放的显示效果,把同一张图分别复制到1x、2x、3x分类下也不会带来可感知的包体积增长,省掉系统实时缩放的微小开销。但对你这个模糊占位的使用场景来说,只放3x已经完全够用,没必要多做这一步。
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

