快速適配先說結論,找設計師要2張啟動圖:
iPhone XR:828px x 1792px
iPhone XS Max: 1242px x 2688px
代碼中使用了屏幕size判斷是否是iPhone X的需要修改,請翻到最后。
LaunchImage中只有iPhone X/iPhone XS
XCode GM Bug?
項目中使用LaunchImage來做啟動圖,那么有可能在XCode GM的LaunchImage中會出現只有iPhone X/iPhone XS啟動圖,并且iOS 8.0 and Later
沒有被選中,并且沒有iPhone XR/iPhone XS Max,需要手動選擇一下iOS 8.0 and Later
,才會出現iPhone XR/iPhone XS Max啟動圖。 這可能是XCode GM中的一個Bug。
XCode9 LaunchImage
<figure>[圖片上傳失敗...(image-236319-1539309851805)]
<figcaption></figcaption>
</figure>
XCode10 GM LaunchImage iOS 8.0 and Later
沒有被選中
<figure>[圖片上傳失敗...(image-4f7273-1539309851805)]
<figcaption></figcaption>
</figure>
XCode10 GM LaunchImage iOS 8.0 and Later
手動選中才出現 iPhone XR/iPhone XS Max
<figure>[圖片上傳失敗...(image-c358a5-1539309851805)]
<figcaption></figcaption>
</figure>
iPhone XR / XS Max 對老版本兼容請求
如果沒有設置iPhone XR/iPhone XS Max啟動圖但設置了iPhone X的啟動圖,iPhone XR / XS Max默認會走iPhone X 的尺寸375ptx812pt,會對內容近乎于等比拉伸放到iPhone XR / XS Max屏幕內,如下圖:
<figure>[圖片上傳失敗...(image-d42e95-1539309851805)]
<figcaption></figcaption>
</figure>
這里為什么說是近乎于等比拉伸: iPhone X 高寬比:812/375 = 2.16533333 iPhone XR 和 iPhone XS Max 高寬比:896/414 = 2.16425121
iPhone XR / XS Max 屏幕尺寸
<figure>[圖片上傳失敗...(image-61f2ae-1539309851805)]
<figcaption></figcaption>
</figure>
型號 | 邏輯尺寸 | 系數 | 分辨率 |
---|---|---|---|
iPhone XR | 414pt x 896pt | @2 | 828px x 1792px |
iPhone XS Max | 414pt x 896pt | @3 | 1242px x 2688px |
當時看發布會覺得XR 828px的分辨率有點奇怪,現在看來并不是蘋果不想做720或1080,而是有照顧開發工程師的目的。 XR 和 XS Max 在邏輯大小上非常統一2x,3x就夠了,也不用做其他的切圖。
所以現在只是需要設計師給2張效果圖:
iPhone XR:828px x 1792px
iPhone XS Max: 1242px x 2688px
Tips
1. 代碼中判斷是否是iPhone X時需要注意
如果你以前是使用設備尺寸來判斷iPhone X那就需要修改了,判斷iPhone X主要是因為劉海的原因可能要做些特殊處理。鑒于iPhone X/XS/XR/XS Max底部都會有安全距離,所以可以利用safeAreaInsets.bottom > 0.0
來判斷是否是iPhone X/XS/XR/XS Max。
safeAreaInsets支持iOS11及以后。
static inline BOOL isIPhoneXSeries() {
BOOL iPhoneXSeries = NO;
if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {
return iPhoneXSeries;
}
if (@available(iOS 11.0, *)) {
UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
if (mainWindow.safeAreaInsets.bottom > 0.0) {
iPhoneXSeries = YES;
}
}
return iPhoneXSeries;
}
作者:Shanesun
鏈接:https://juejin.im/post/5b9a4b62e51d450e6f2e255b
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。