日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iOS中的长文本高度计算

發(fā)布時(shí)間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS中的长文本高度计算 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

很多的時(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。