文字排版的基礎概念
字體(Font):
和我們平時說的字體不同,計算機意義上的字體表示的是同一大小,同一樣式(Style)字形的集合。從這個意義上來說,當我們?yōu)槲淖衷O置粗體,斜體時其實是使用了另外一種字體(下劃線不算)。而平時我們所說的字體只是具有相同設計屬性的字體集合,即Font Family或typeface。
字符(Character)和字形(Glyphs):
排版過程中一個重要的步驟就是從字符到字形的轉(zhuǎn)換,字符表示信息本身,而字形是它的圖形表現(xiàn)形式。字符一般就是指某種編碼,如Unicode編碼,而字形則是這些編碼對應的圖片。但是他們之間不是一一對應關系,同個字符的不同字體族,不同字體大小,不同字體樣式都對應了不同的字形。而由于連寫(Ligatures)的存在,多個字符也會存在對應一個字形的情況。

字形描述集(Glyphs Metris)
即字形的各個參數(shù)。如下面的兩張圖:


邊框(Bounding Box):
一個假想的邊框,盡可能地容納整個字形。
基線(Baseline):
一條假想的參照線,以此為基礎進行字形的渲染。一般來說是一條橫線。
基礎原點(Origin):
基線上最左側(cè)的點。
行間距(Leading):
行與行之間的間距。
字間距(Kerning):
字與字之間的距離,為了排版的美觀,并不是所有的字形之間的距離都是一致的,但是這個基本步影響到我們的文字排版。
上行高度(Ascent)和下行高度(Decent):
一個字形最高點和最低點到基線的距離,前者為正數(shù),而后者為負數(shù)。當同一行內(nèi)有不同字體的文字時,就取最大值作為相應的值。如下圖:

紅框高度既為當前行的行高,綠線為baseline,綠色到紅框上部分為當前行的最大Ascent,綠線到黃線為當前行的最大Desent,而黃框的高即為行間距。由此可以得出:lineHeight = Ascent + |Decent| + Leading。
更加詳細的內(nèi)容可以參考蘋果的這篇文檔: 《Cocoa Text Architecture Guide》。當然如果要做到更完善的排版,還需要掌握段落排版(Paragragh Style)相關的知識,但是如果只是完成聊天框內(nèi)的文字排版,以上的基礎知識已經(jīng)夠用了。詳細的段落樣式相關知識可以參考: 《Ruler and Paragraph Style Programming Topics》