boundingRectWithSize計(jì)算文字高度不準(zhǔn)問題

UILabel有兩個(gè)計(jì)算文字大小的方法:

1.針對(duì)對(duì)富文本計(jì)算NSAttributedString

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 6_0);

2.針對(duì)與普通文本計(jì)算NSString

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary*)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);

對(duì)于這兩個(gè)方法有相同的參數(shù)
參數(shù)一:size表示計(jì)算文本的最大寬高(就是限制的最大高度、寬度),一般情況下我們?cè)O(shè)置最大的寬度、高度不限制CGSizeMake(getScreenWidth(), CGFLOAT_MAX),注意:限制的寬度不同,計(jì)算的高度結(jié)果也不同。

參數(shù)二: options表示計(jì)算的類型
NSStringDrawingUsesLineFragmentOrigin:繪制文本時(shí)使用 *line fragement origin *而不是 baseline origin。一般使用這項(xiàng)。

NSStringDrawingUsesFontLeading:根據(jù)字體計(jì)算高度

NSStringDrawingUsesDeviceMetrics:使用象形文字計(jì)算高度

NSStringDrawingTruncatesLastVisibleLine:如果NSStringDrawingUsesLineFragmentOrigin設(shè)置,這個(gè)選項(xiàng)沒有用

參數(shù)三:attributes 表示富文本的屬性NSAttributedString.h比如字體、文字樣式NSFontAttributeName、NSParagraphStyleAttributeName

參數(shù)四:NSStringDrawingContext
When stringDrawingContext=nil, it's equivalent of passing the default instance initialized with [[NSStringDrawingContext alloc] init] context
上下文,包括一些信息,例如如何調(diào)整字間距以及縮放。該參數(shù)一般可為 nil 。


問題:有時(shí)候計(jì)算文字的時(shí)候大小和實(shí)際的大小不一樣?

解決辦法1:檢測(cè)字體和限制的寬度是否設(shè)置正確(樓主載在這里/(ㄒoㄒ)/~~)

解決辦法2:可以設(shè)置NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
注意:swift中要寫這樣的組合是不支持的,點(diǎn)擊這里查看解決方法www.itdecent.cn/p/545f7f1d8741

解決辦法3:當(dāng)你是把獲得的高度來布局控件的View的高度的時(shí)候,需要把獲得size = [string boundingRectWithSize:CGSizeMake(getScreenWidth(), CGFLOAT_MAX) options:options context:nil].size轉(zhuǎn)化為ceilf(size.height)

解決辦法4:由于這個(gè)方法計(jì)算字符串的大小的通過取得字符串的size來計(jì)算, 如果你計(jì)算的字符串中包含\n\r 這樣的字符,也只會(huì)把它當(dāng)成字符來計(jì)算。但是在顯示的時(shí)候就是\n是轉(zhuǎn)義字符,那么顯示的計(jì)算的高度就不一樣了,所以可以采用:計(jì)算的高度 = boundingRectWithSize計(jì)算出來的高度 + \n\r轉(zhuǎn)義字符出現(xiàn)的個(gè)數(shù) * 單行文本的高度。

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

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

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