使用[UIScreen mainScreen].bounds就夠了嗎
獲取屏幕的寬高,覺得就這么一行簡單的代碼[UIScreen mainScreen].bounds,就可以讀取出屏幕的寬高(點(diǎn))。這有問題嗎?沒有問題呀,但是為啥我獲取到的值,跟實(shí)際的屏幕尺寸不匹配呢?在項(xiàng)目中,開始是6Plus的尺寸一直獲取不正確,后面又發(fā)現(xiàn)iPhone XR和iPhone X MAX的尺寸也不正確。
下圖是所有iPhone設(shè)備的屏幕尺寸列表:

到處查找原因,發(fā)現(xiàn)光會使用這句代碼還不夠,這句代碼獲取到的值還會受下面兩種情況的影響。
- 6Plus上開啟了“顯示放大”模式;
- 啟動圖中沒有正確加入該類型的啟動圖。比如:iPhone xr的設(shè)備,沒有配置啟動圖,就獲取不到正確的屏幕尺寸。
但是為什么啟動圖沒加,這個問題沒有被發(fā)現(xiàn)呢。首先我是知道啟動圖不添加,不會正確初始化屏幕的尺寸這個問題,我在查找問題的時候也去看了LaunchImage里的啟動圖,可是為什么沒發(fā)現(xiàn)xr和x max的啟動沒有添加呢,巨坑來了:
Xcode9升級到xcode10時, LaunchImage 上iOS8 and later被默認(rèn)去掉打鉤了,所以咋一看LaunchImage里所有空位的地方都放了啟動圖了。
這個問題就變?yōu)榱薸Phone XR和X Max的適配不徹底導(dǎo)致,這里具體怎么適配,可以參考這邊文章:
適配iPhone XR/iPhone XS Max
因此正確獲取iPhone XR和X Max的解決方案是:
- 打開launchImage里的ios8.0 and later
- 添加iPhone XS Max 和iPhone XR的啟動圖
不過由于現(xiàn)在Xcode10.1了也還沒有解決,Xcode10打的包上線后在iOS9.3的設(shè)備上,出現(xiàn)大面積隨機(jī)的crash的問題。要么解決打包的問題,要么像我們選擇暫時還是用Xcode9打包上線。所以目前等待蘋果趕緊修復(fù)這個問題。