前言:對(duì)于文本的高度計(jì)算通常我們會(huì)使用NSString的- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullableNSDictionary *)attributes context:(nullableNSStringDrawingContext *)context方法酬凳,設(shè)置約束的size寇仓,并把對(duì)應(yīng)的計(jì)算屬性賦值給attributes正常情況下就會(huì)到我們所需要的實(shí)際文本高度,但是也有例外當(dāng)我們?cè)O(shè)置NSMutableParagraphStyle為lineBreakMode的是要值得注意。
問(wèn)題場(chǎng)景:接到的需求是限制兩行文本顯示攘蔽,如果文本內(nèi)容過(guò)長(zhǎng),結(jié)尾要用省略號(hào)標(biāo)志绳矩。接到這個(gè)需求以后平项,簡(jiǎn)單粗暴的設(shè)置了NSAttributedString的attributes,然后用對(duì)應(yīng)的attributes去計(jì)算文本高度羊娃,發(fā)現(xiàn)計(jì)算出來(lái)的總是一行的高度唐全。
原因:原因就是設(shè)置了NSMutableParagraphStyle的lineBreakMode為NSLineBreakByTruncatingTail 、NSLineBreakByTruncatingHead 蕊玷、NSLineBreakByTruncatingMiddle時(shí)計(jì)算的文本高度為單行文本高度邮利。
解決方法:實(shí)際計(jì)算時(shí)我們應(yīng)該用NSLineBreakByWordWrapping來(lái)計(jì)算文本的實(shí)際高度,然后顯示時(shí)用NSLineBreakByTruncatingTail即可