關於字型適配的那些事

2021-07-09 12:17:49 字數 2901 閱讀 9268

之前做過很多專案都沒考慮過字型適配問題。相信絕大多數人在做專案時,都沒仔細去考慮這件事。一般都是根據ui出的圖做個估算,有耐心的估計會自己拿工具測量下。如今,考慮到iphone機型的多樣性,ui設計師不可能針對每一款iphone的螢幕出一套ui圖。一般而言,都是基於5s的標準出ui。當我們在設定字型時,往往都是基於ui並且針對不同的螢幕字型也都是絕對的。那麼問題來了,細心的同學可能會注意到,相同大小的字型在5s或6上也許差別不大,但在6p上字型有縮小的現象,其原因由解析度導致。

在6出來不久,曾看過有關適配的文章,其中關於iphone尺寸規格如下:裝置寬

高對角線

邏輯解析度

scale factor

裝置解析度

ppi3gs

2.4inch

4.5inch

3.5inch

320x480

@1x320x480

1634(s)

2.31inch

4.5inch

3.5inch

320x480

@2x640x960

3265c

2.33inch

4.90inch

4inch

320x568

@2x640x1136

3265(s)

2.31inch

4.87inch

4inch

320x568

@2x640x1136

3266

2.64inch

5.44inch

4.7inch

375x667

@2x750x1334

3266p

3.06inch

6.22inch

5.5inch

414x736

@3x1242x2208

401

從iphone3gs/iphone4(s)過渡到iphone5(s)時,在邏輯上寬度不變高度稍高,之前舊的素材和布局通過autoresizingflexible簡單適配即可執行得很好,但由於高寬比增大,上下兩端出現黑粗邊(典型如launchimage)。從解析度的角度來看,除了需要提供launchimage這種滿屏圖,其他基本沿用二倍圖(@2x);從螢幕尺寸角度來看,需要對縱向排版略加調整。

從iphone5(s)發展到iphone6(+),由於高寬比保持不變,ios對圖示、、字型進行等比放大自適應,清晰度會有所降低。同時,絕對座標布局會導致在大屏下出現偏左偏上的問題。從解析度的角度來看,iphone6沿用二倍圖(@2x),但需為iphone6+提供更高的三倍圖(@3x);從螢幕尺寸角度來看,需要重新對ui元素尺寸和布局進行適配,以期視覺協調。

以上屬於科普類的東西,下面來點實際的。

關於字型適配有2種方案。

#define adaptive__font_size_minimum_value 20

#define adaptive_font_size_maximum_value 30

-(uifont *) adjustfontsizetofillitscontents

]; cgrect rectsize = [attributedtext boundingrectwithsize:cgsizemake(self

.frame

.size

.width, cgfloat_max) options:nsstringdrawinguseslinefragmentorigin context:nil];

if (rectsize.size

.height

<= self

.frame

.size

.height)

}return

self

.font;

}

cgfloat scale = ([uiscreen mainscreen].bounds

.size

.width / 320);

nslog(@"before : %.1f", [font pointsize]);

font = [uifont fontwithname:[font fontname] size:fontsize * scale];

nslog(@"after : %.1f", [font pointsize]);

既然需要重新設定uifont,那麼我們不可避免的要hookuifont的類方法`fontwithname:size:做個函式交換的處理。

函式的交換我們需要用到runtime機制。

void bd_exchageclassmethod(class aclass, sel oldsel, sel newsel)

然後,我們給uifont建立乙個categroy檔案,檔名為adaptivefont。在實現檔案**如下:

@implementation

uifont (adaptivefont)

+ (void)hook

+ (uifont *)hook_fontwithname:(nsstring *)fontname size:(cgfloat)fontsize

@end

@inte***ce

uifont (adaptivefont)

+ (void)hook;

+ (uifont *)hook_fontwithname:(nsstring *)fontname size:(cgfloat)fontsize;

@end

適配的那些事

1.何為適配 簡單來說就是在不同裝置上檢查功能及樣式是否正常 2.裝置的挑選 b.廠家型號,主要是針對android機子來說的,某些廠商有自己定製的rom。測試方法 可以先測使用者常用的機型,再考慮特殊機型 如小公尺 魅族等等定製rom的機子 最後可以測下現有的 未測過的型號。以下是開發拉取的截止目...

關於開始的那些事

人總是有惰性的,當然我自己深有體會。一直有個想法想寫寫自己的blog,但隨時間的推移,很久都沒付出行動。最近工作專案開始不那麼忙了,維護乙份自己的blog的想法愈發強烈了。想把自己的一些想法,或者看到的一些有用的東西給大家分享,也給自己留下成長的痕跡。我從小喜歡看書,各種各樣的書屬於不求甚解的狀態。...

關於coredump的那些事

今天在網上搜了一些有關coredump的知識,簡單記一下,以防忘記 core dump檔名的模式儲存在 proc sys kernel core pattern中,預設是core 主要是今天比較鬱悶,要除錯程式crash,就用ulimit c unlimited設定了一下core檔案的大小,但是測試...