iPhone 開發(fā)中的屏幕適配問題總結(jié)

iPhone 開發(fā)中的屏幕適配問題總結(jié)

前言

隨著iPhone的屏幕越來越多,各種尺寸讓開發(fā)也需要跟Android一樣,要做屏幕適配了。在開發(fā)過程中,跟設(shè)計師經(jīng)常因為調(diào)整像素而爭吵。為了解決這種問題,我寫下此文,讓開發(fā)跟設(shè)計可以歡樂的做朋友了。

此文將從以下幾個方面出發(fā),解決問題。

  1. iPhone的幾種屏幕

  2. iPhone屏幕中的概念

  3. 設(shè)計稿到代碼的過程

  4. 結(jié)合設(shè)計原則給出具體的實現(xiàn)方案

iPhone的幾種屏幕

iphone 尺寸
iphone 尺寸進(jìn)化

以上兩張圖完全介紹了現(xiàn)在所有的iPhone的屏幕。包括即將出現(xiàn)的iphone se它也是4寸屏。

從第一張圖中發(fā)現(xiàn),只有6p是3x的圖,其余屏幕都是2x圖。再次解釋一下為什么6p是3x圖。因為6p的實際像素是1080 * 1920. 1080 / 414 = 2.6。 但是讓設(shè)計出一張2.6x的圖,那豈不是要瘋了。所以,蘋果為了方面開發(fā)者,做出了3x的標(biāo)準(zhǔn)。然后蘋果會自動給你縮放。詳見第二張圖。

iPhone屏幕中的概念

  1. point(點)

    這個點是一個邏輯概念,是脫離屏幕而存在的。開發(fā)在寫代碼的時候,就用point來確定位置。

    在2x模式下, 1point = 2pixel。

    在3x模式下, 1point = 3pixel。

  2. pixel (像素)

    像素是顯示成像的最小單位。個人理解。
    設(shè)計給的圖的標(biāo)注,都是按照像素標(biāo)的。

  3. ppi (pixel per inch)

    解釋一下就是每英寸的像素數(shù)量。ppi越高,說明屏幕越精細(xì)。

  4. inch

    其實這個概念是最好理解的。直譯就是英寸。是屏幕的物理單位。但是
    這個確是肉眼最直觀的單位,上面說的3種概念,你都不能用肉眼看出來。例如,他說靠左了,那么它的參照物一定是整個屏幕的,這種直觀的感覺都可以統(tǒng)一到屏幕的實際大小上來。而且,設(shè)計在拿著手機(jī)看效果的時候,給他直觀的感覺也是以inch論的。

    1 inch = 2.54cm

設(shè)計稿到代碼的過程

設(shè)計稿 --->代碼
從一個完整的設(shè)計稿,到代碼。我們需要以下兩種元素的具體標(biāo)注。

  1. 其實圖片,我們需要設(shè)計給出對應(yīng)屏幕模式的圖片。2x的,需要在正常像素基礎(chǔ)上乘以2。 3x的,需要在正常像素基礎(chǔ)上乘以3。

  2. frame,間距

    各種元素間需要間距,元素自身需要frame。設(shè)計給的稿的標(biāo)注一般都是按照像素標(biāo)注的。而在蘋果中的單位是point。所以我們要進(jìn)行一次換算。如果設(shè)計按照2x模式給的標(biāo)注。那么我們在用的時候就要除以2。按照3x(6p)模式給的標(biāo)注,那我們得除3,得出相應(yīng)的point然后再寫入代碼。

理想狀態(tài)是設(shè)計針對各種模式(2x , 3x),各種屏幕(3.5,4,4.7,5.5)分別做出設(shè)計稿。這樣就完美了。其實這種方案不僅僅給設(shè)計帶來的大量的工作量,而對開發(fā)也帶來了很大的工作量?,F(xiàn)在基本的做法都是,設(shè)計會針對一種主流的屏幕給出設(shè)計稿,然后開發(fā)按照上面的說換算完畢后,進(jìn)行編碼。在然后根據(jù)具體運行效果做出微調(diào)。其實在開發(fā)過程中,這些微調(diào)是最耗費工時的。

問題來源,設(shè)計會根據(jù)看到的實際運行效果進(jìn)行微調(diào)。

那么微調(diào),是靠什么感知的呢?當(dāng)然是肉眼觀察。當(dāng)然,設(shè)計的眼睛都可以達(dá)到像素級。不過,他們靠的還是感知。

下面我舉一個例子:

在屏幕兩個View間距10point。那么這個10point,在2x與3x下究竟會不會有很大差別呢?

按照常理推斷。10point 在2x下對應(yīng) 20 pixel。在3x 對應(yīng)30 pixel。 這樣對比的話那簡直差別太大了。

其實如果代碼里寫就是10,不針對2x,3x做區(qū)分。那他的效果是啥樣的。

既然設(shè)計靠肉眼去看,那么咱們就統(tǒng)一換算乘inch,這種最接近肉眼的單位。

2x:

10 * 2 / 326 = 0.061

3x:

10 * 3 / 1.15 * 401 = 0.065 (1.15是上面蘋果給你縮放的倍數(shù))

綜上例子說明,同樣10p , 在肉眼看起來其實沒有多大差別。

結(jié)合設(shè)計原則給出具體的實現(xiàn)方案

在上面已經(jīng)提到了,如果設(shè)計針對2x給的標(biāo)注,你完全可以用在3x模式下,基本看不出來。但是這里面有一個潛在的問題。

我把設(shè)計的排版布局總結(jié)為:

  1. 橫向直排;也就是從左到右進(jìn)行布局。

  2. 兩頭擠;也就是先定死兩邊的間距,然后往中間布局元素。

如果設(shè)計給的圖是從左向右的布局,只是看兩者間距。按照上述是沒有問題的。

但是,如果設(shè)計是從兩頭往中間布局,先定死2邊間距,然后再按照屏幕的寬適當(dāng)調(diào)整元素間布局,這樣就麻煩了。因為元素的個數(shù)是定死的,屏幕的寬是不一樣的。這就導(dǎo)致了不同的屏幕寬度,元素的間距或者元素大小就要做適配了。

如果真的出現(xiàn)了從兩頭往中間布局的設(shè)計方案,就應(yīng)該使用autolayout了。把元素的位置根據(jù)屏幕比例定死。比如3個元素,第一個元素就在屏幕的1/3處,第二個就在3/4,第三個就在4/5,這樣,這些定死了。他們的間距就相應(yīng)的定死了。這樣的結(jié)果是,各種屏幕元素間的間距肯定是不一樣的。所以,這個要跟設(shè)計在實際過程中探討他們的設(shè)計方案。優(yōu)先選用橫向直排。其實選用兩頭擠。

在插一句,其實屏幕大了,應(yīng)該是在能看清的前提下,一行多放點元素。而不是說各種屏幕都放同樣多的元素。

比如說:

3.5inch 放10個元素

4inch 也放10個

5.5inch 也放10個

這種,我感覺應(yīng)該是不合理的。5.5inch就應(yīng)該放20個,或者更多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容