UILabel計(jì)算高度

關(guān)鍵函數(shù)

  • iOS6以前- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size此函數(shù)已經(jīng)標(biāo)記為廢棄

  • iOS7以后- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context

注意點(diǎn)

  • 這個(gè)問(wèn)題一般在UILabel中遇到,但其實(shí)是NSString的一個(gè)方法。所以在UILabel和UITextView或者UIWebView中都可以使用。

  • 為了獲得一個(gè)CGRect,需要先提供一個(gè)CGSize的參數(shù)。這點(diǎn)是自己一直比較難理解的。基本的思路是寬和高先確定一個(gè),另外一個(gè)給一個(gè)很大很大的數(shù),然后從結(jié)果中得出另外一個(gè)相對(duì)準(zhǔn)確的數(shù)值。比如表格的cell中是一個(gè)內(nèi)容不確定的UILabel,寬度一般是表格的寬度或者干脆是屏幕的寬度,然后就可以利用這個(gè)方法獲得高度。這樣cell的高度就比較容易獲得了。

  • 對(duì)于UILabel,numberOfLines一般要先設(shè)置為0,允許多行文本

  • font屬性要制定,不過(guò)是在attributes參數(shù)中,這是一個(gè)NSAttributedString的屬性,是一個(gè)字典,具體的要去相應(yīng)的頭文件查看。這也是這個(gè)函數(shù)難用的地方

  • options參數(shù)一般選第一個(gè)NSStringDrawingUsesLineFragmentOrigin

  • context參數(shù)一般給nil

  • 得出的size,一般width事先知道,height是我們希望得到的。得到的結(jié)果需要加1,不然,字符就是放不下,出現(xiàn)...。這個(gè)只是實(shí)際遇到,不應(yīng)該這樣,原因不明。

例子代碼

//獲取多行字符串的寬度和高度
UILabel *titleLabel = [[UILabel alloc]init];
titleLabel.font = [UIFont systemFontOfSize:13];
NSString *titleContent = @"獲取 UILabel 寬度和高度測(cè)試獲取 UILabel 寬度和高度測(cè)試獲取 UILabel 寬度和高度測(cè)試獲取 UILabel 寬度和高度測(cè)試獲取 UILabel 寬度和高度測(cè)試獲取 UILabel 寬度和高度測(cè)試獲取 UILabel 寬度和高度測(cè)試";
titleLabel.text = titleContent;
titleLabel.numberOfLines = 0;//多行顯示,計(jì)算高度
titleLabel.textColor = [UIColor lightGrayColor];
CGSize titleSize = [titleContent boundingRectWithSize:CGSizeMake(kScreen_Width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13]} context:nil].size;
titleLabel.size = titleSize;
[self.view addSubview:titleLabel];

參考文章

IOS 動(dòng)態(tài)獲取 UILabel 元素的寬度和高度

NSAttributedString UIKit Additions 參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容