關(guān)于根據(jù)內(nèi)容大小來進(jìn)行文本高度的自適應(yīng)瘩蚪,這一知識點(diǎn)泉懦,似乎似懂非懂,很是模糊疹瘦,這不崩哩,今日決定非得把它弄懂50%,剩下的50%留著在以后去鞏固^*^言沐。
文本自適應(yīng)高度用到的地方:自定義cell里面的Label,通常要顯示較多的文字信息邓嘹,label根據(jù)文字信息來靈活的調(diào)節(jié)cell的高度。應(yīng)用的場景如聊天對話框险胰,評論文本信息等汹押。它需要計算出文字部分的尺寸,才能設(shè)計出合適的控件尺寸和位置起便。
首先來了解IOS 7.0計算文本尺寸的方法棚贾,用到的就是下面這一關(guān)鍵函數(shù):
-(CGRect)boundingRectWithSize:(CGSize)size
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:(NSStringDrawingOptions*)options
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?attributes:(NSDictionary*)attributes
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?context:(NSStringDrawingContext *)context
這是NSString的對象方法艺糜,一個字符串實(shí)例調(diào)用該方法時髓涯,方法會通過傳入的參數(shù)返回一個CGRect型數(shù)據(jù),這個數(shù)據(jù)的size就是此時字符串顯示成文本的尺寸。
參數(shù)一管嬉、CGSize)size : 表示計算文本的最大寬高,就是限制的最大高度执隧、寬度肆糕,一般情況下我們設(shè)置最大的寬度态鳖、高度不限制表示為:
CGSizeMake(getScreenWidth(), CGFLOAT_MAX)
注意:限制的寬度不同,計算的高度結(jié)果也不同.限制尺寸耿芹。
參數(shù)二崭篡、(NSStringDrawingOptions*)options:表示計算的類型,有四種類型:
1.NSStringDrawingTruncatesLastVisibleLine:如果文本內(nèi)容超出指定的矩形限制猩系,文本將被截去并在最后一個字符后加上省略號媚送。如果NSStringDrawingUsesLineFragmentOrigin沒有設(shè)置,則該選項(xiàng)不生效
2.NSStringDrawingUsesLineFragmentOrigin:整個文本將以每行組成的矩形為單位計算整個文本的尺寸
3.NSStringDrawingUsesFontLeading:使用字體的行間距來計算文本占用的范圍寇甸,即每一行的底部到下一行的底部的距離計算
4.NSStringDrawingUsesDeviceMetrics:將文字以圖像符號計算文本占用范圍塘偎,而不是以字符計算。也即是以每一個字體所占用的空間來計算文本范圍
對于這四種類型的效果拿霉,可以多種類型組合使用:
a吟秩、如果options參數(shù)=NSStringDrawingUsesLineFragmentOrigin,那么整個文本將以每行組成的矩形為單位計算整個文本的尺寸绽淘。
(在這里有點(diǎn)奇怪涵防,因?yàn)樽煮w高度大概是13.8,textView中大概有10行文字沪铭,此時用該選項(xiàng)計算出來的只有5行壮池,即高度為69。
b杀怠、如果options參數(shù)=NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin 卻可以得出文字剛好有10行椰憋,即高度為138,
c赔退、如果options參數(shù)=NSStringDrawingTruncatesLastVisibleLine
或者如果options參數(shù)= NSStringDrawingUsesDeviceMetric橙依,那么計算文本尺寸時將以每個字或字形為單位來計算。
d硕旗、如果options參數(shù)=NSStringDrawingUsesFontLeading則以字體間的行距(leading窗骑,行距:從一行文字的底部到另一行文字底部的間距。)來計算漆枚。
以上具體可見iOS7計算文本尺寸新方法创译。
參數(shù)三、(NSDictionary*)attributes:文本的屬性墙基,如字體软族,文字樣式(NSFontAttributeName辛藻、NSParagraphStyleAttributeName)。例如互订,
NSDictionary *dict = @{NSFontAttributeName : font}
參數(shù)四、(NSStringDrawingContext *)context:上下文痘拆。包括一些信息仰禽,例如如何調(diào)整字間距以及縮放。最終纺蛆,該對象包含的信息將用于文本繪制吐葵。該參數(shù)可為 nil 。
送上簡單示例:
demo學(xué)習(xí)的新知識點(diǎn):
NSLineBreakMode屬性詳解:用于多行和多行文本->字符截斷類型(lineBreakMode //設(shè)置文字過長時的顯示格式)
// NSParagraphStyle
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping :以單詞為顯示單位顯示桥氏,后面部分省略不顯示温峭。默認(rèn)
NSLineBreakByCharWrapping,以字符為顯示單位顯示,后面部分省略不顯示
NSLineBreakByClipping,剪切與文本寬度相同的內(nèi)容長度字支,后半部分被刪除
NSLineBreakByTruncatingHead, 前面部分文字以……方式省略凤藏,顯示尾部文字內(nèi)容。
NSLineBreakByTruncatingTail, 結(jié)尾部分的內(nèi)容以……方式省略堕伪,顯示頭的文字內(nèi)容
NSLineBreakByTruncatingMiddle 中間的內(nèi)容以……方式省略揖庄,顯示頭尾的文字內(nèi)容
}
未完待續(xù)。欠雌。蹄梢。。