在iOS7之前一直使用NSString類 的 sizeWithFont:constrainedToSize:lineBreakMode:方法來計算文本的尺寸來適應(yīng)label控件, 但現(xiàn)在該方法已經(jīng)被淘汰了, 我們不得不另覓良方.
運行結(jié)果:
方法一:
NSString *str = @"大學(xué)的時候辛藻,隔壁寢室是個學(xué)霸寢室。
明明是上著同樣的課程缴淋,她們四個,每次期末考試考出來的姻报,
這四個人總是能夠排在前幾名.我當(dāng)時真想不通為什么推励,她們
也和我一樣學(xué)曲梗,怎么就是比我好那么多。一直到有一次去她
們寢室玩弄跌,我才發(fā)現(xiàn)了些許微妙的真相.她們寢室挺安靜甲喝,若
是聽歌看視頻,自然是可以的铛只,不過相互之間都插著耳機埠胖,
就怕打擾到彼此相處于同一片天空,哪怕關(guān)系再好淳玩,也要相
互體諒直撤,相互理解。我想到我們寢室總是嘰嘰喳喳個沒完凯肋,
一天到晚沒個停歇谊惭,哪怕想要好好學(xué)習(xí),被這氣氛一鬧侮东,也
早就沒了心思圈盔。她們寢室四人總是會早早起床,一起相約去
食堂吃飯悄雅,然后一起去自習(xí)教室早讀驱敲。我想起我剛開學(xué)幾天
也是這么興致勃勃的,可是沒過一個禮拜宽闲,自然而然就松懈了下來.";
#調(diào)用計算方法
//參數(shù)一: 字符串內(nèi)容字體的字號
//參數(shù)二: 約束大小(該值只是一個參考值, 這里我們只是要實現(xiàn)適應(yīng)label高度的結(jié)果, 所以此處的高度一定要給以給比較大的值, 超過實際高度, 否則無效)
//參數(shù)三: 文本換行方式
CGSize sizeLabel = [str sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 3000) lineBreakMode:NSLineBreakByCharWrapping];
//初始化label, 高度和寬度使用我們計算的結(jié)果
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, sizeLabel.width, sizeLabel.height)];
textLabel.font = [UIFont systemFontOfSize:14]; //與上面的字號統(tǒng)一噢~
textLabel.numberOfLines = 0;
textLabel.text = str;
textLabel.backgroundColor = [UIColor orangeColor];
[self.view addSubview:textLabel];```
接下來, 說說現(xiàn)在能夠正常使用的方法
先來看看iOS7 SDK包中關(guān)于 --> boudingRectWithSize:options:attributes:context方法的定義
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);
類似方法:
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0); ```
方法二:
//參數(shù)一: 寬高限制, 用于計算文本繪制時占據(jù)的最大矩形塊
//參數(shù)二: 文本超出指定的矩形限制時的顯示方式
//參數(shù)三: 富文本的設(shè)置
NSDictionary *fontDic = @{NSFontAttributeName:[UIFont systemFontOfSize:14]};
#方法二
//文字高度計算時必須使用該值NSStringDrawingUsesLineFragmentOrigin, 否則無效
CGSize sileLabel = [str boundingRectWithSize:CGSizeMake(300, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:fontDic context:nil].size;
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, sileLabel.width, sileLabel.height)];
textLabel.font = [UIFont systemFontOfSize:14]; //與上面的字號統(tǒng)一噢~
textLabel.numberOfLines = 0;
textLabel.text = str;
textLabel.backgroundColor = [UIColor yellowColor];
[self.view addSubview:textLabel];
1.其中如果options參數(shù)為NSStringDrawingUsesLineFragmentOrigin众眨,那么整個文本將以每行組成的矩形為單位計算整個文本的尺寸。(在這里有點奇怪容诬,因為字體高度大概是13.8娩梨,textView中大概有10行文字,此時用該選項計算出來的只有5行览徒,即高度為69狈定,而同時使用NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin卻可以得出文字剛好有10行,即高度為138,這里要等iOS7官方的文檔出來再看看選項的說明纽什,因為畢竟以上文檔是iOS6的東西)
2.如果為NSStringDrawingTruncatesLastVisibleLine或者NSStringDrawingUsesDeviceMetric措嵌,那么計算文本尺寸時將以每個字或字形為單位來計算。
3.如果為NSStringDrawingUsesFontLeading則以字體間的行距(leading芦缰,行距:從一行文字的底部到另一行文字底部的間距企巢。)來計算。