iOS中的长文本高度计算
很多的時(shí)候如果只是要顯示一些簡(jiǎn)單的短文本,比如確定、取消什么的,一個(gè)UILabel就足夠了。
?
但是某些情況下,文本較長(zhǎng)。包含這些文本的View的高度取決于文本的高度。比如我們常見(jiàn)的
微博。雖然文本所占的高度內(nèi)容限制在了140字,但是用戶(hù)發(fā)的微博是140字內(nèi)的多少字,
我們不清楚。那么在用到UITableView的時(shí)候,每條微博所在的Cell的高度都要根據(jù)其中包含的
文字及其他內(nèi)容所需要的實(shí)際高度來(lái)進(jìn)行設(shè)定。當(dāng)然,此文只討論文本的高度計(jì)算問(wèn)題,而且
難度也只集中在文本的動(dòng)態(tài)高度上。?
?
長(zhǎng)文本高度的計(jì)算沒(méi)有方便的方法,雖然簡(jiǎn)單。在計(jì)算前必須要給出長(zhǎng)文本所在view的寬度
?和一個(gè)無(wú)限高度,然后計(jì)算長(zhǎng)文本實(shí)際使用的高度。由以上條件可以得出一個(gè)計(jì)算公式:
? ? ? ? ?實(shí)際高度 = f(text, view.width, 9999);
但是還有一個(gè)因素不能忘記:字體(font )。用9999代表無(wú)限高度這個(gè)不用解釋了吧:
目前來(lái)說(shuō)iPhone的顯示高度還沒(méi)有9999這么多。 但是這里的無(wú)限高度可以看做是一個(gè)常數(shù)。所以
從參數(shù)中去掉。最后的公式是:
? ? ? ? ? ??實(shí)際高度 = f(text, font, view.width);
很幸運(yùn),上面公式里的f,也就是映射關(guān)系非常簡(jiǎn)單。從下面的一個(gè)例子可見(jiàn)端倪。?1?-?(CGFloat)?calculateTextHeight:(UIFont?*)font?givenText:(NSString?*)text?givenWidth:(NSUinteger)width{
2??
3??????CGSize?size?=?[text?sizeWithFont:font?constrainedToSize:CGSizeMake(width,?9999)
4????????????????????????????????????????????????lineBreakMode:UILineBreakModeWordWrap];
5??????CGFloat?delta?=?size.height;
6??
7??????return?delta;
8?}
?
?
最后你可以用計(jì)算出來(lái)的不同長(zhǎng)度文本的高度來(lái)設(shè)置包含這段文本的View的高度。如下所示:
?
?1??-?(void)?resizeLabel:(UILabel?*)theLabel?shrinkViewIfLabelShrinks:(BOOL)canShrink?{?2?????CGRect?frame?=?[theLabel?frame];
?3?????CGSize?size?=?[self?calculateTextHeight:theLabel.font?givenText:theLabel.text?givenWidth:frame.size.width];
?4?
?5?????CGFloat?delta?=?size.height?-?frame.size.height;
?6?????frame.size.height?=?size.height;
?7?????[theLabel?setFrame:frame];
?8??
?9?????CGRect?contentFrame?=?self.frame;
10?????contentFrame.size.height?=?contentFrame.size.height?+?delta;
11?????if(canShrink?||?delta?>?0)?{
12?????????[self?setFrame:contentFrame];
13?}
?
全文完。如果對(duì)你有幫助,請(qǐng)點(diǎn)推薦。謝謝!
?
?
?
?
?
?
歡迎加群互相學(xué)習(xí),共同進(jìn)步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,轉(zhuǎn)載請(qǐng)注明出處!本文轉(zhuǎn)自張昺華-sky博客園博客,原文鏈接:http://www.cnblogs.com/sunshine-anycall/archive/2012/07/31/2617385.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的iOS中的长文本高度计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 无限星赏官回城特效怎么获得
- 下一篇: 存储安全与数据恢复基础手册-服务器篇