开发技巧开发遇到的问题iOS之UITextView

iOS开发-UITextView高度自适应

2016-08-15  本文已影响1328人  中峰

我们通常使用UILabel来展示文字,但当文字中含有链接时,再使用UILabel无法点击文本中的链接。
所以,我们使用UITextView,该控件可识别并可点击文本中的链接。

UITextView 高度自适应 问题

在展示一段文字时,我使用了
CGRect statusMattStrRect = [status.mAttStr boundingRectWithSize:contextSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
来计算出富文本的尺寸,并赋给textView的frame:
self.textView.frame = baseStatusCellFrame.textFrame;
但问题出现了,发现textView的高度小于上面计算出来的文本高度,文本显示不全:

textView显示文字不全.png
UITextView 高度自适应 解决方案

上网查了很多资料,看了很多人写的代码,但要么是太复杂,要么是没有效果。
最后终于找到了最好最简单的解决方案:
为textView设置以下两个属性(self表示继承自UITextView的自定义textView控件):
self.textContainerInset = UIEdgeInsetsZero;
self.textContainer.lineFragmentPadding = 0;
效果如下:

textView显示文字完全.png
解释

UITextView中有一个textContainer,用来展示文本。

1、系统会为其默认设置距UITextView上、下边缘各8的页边距:
使用以下代码可以看到:
NSLog(@"textContainerInset: %@",NSStringFromUIEdgeInsets(self.textContainerInset));

默认的页边距.png

2、textContainer中的文段的上、下、左、右又会被填充5的空白。
使用以下代码可以看到:
float lineFragmentPadding = [self.textContainer lineFragmentPadding]; NSLog(@"lineFragmentPadding: %f",lineFragmentPadding);

textContainer中的文段四周又有5的空白.png

3、将文本的尺寸赋给UITextView的尺寸,UITextView的尺寸就是文本的尺寸了。而系统默认的页边距和空白又占去了一部分尺寸,那么真正展示文字的区域就减少了。所以,我们看到UITextView中文字被展示的不全了。


默认的UITextView会压缩文本显示区域的尺寸.png

为让UITextView的尺寸完全就是文本的尺寸,显示完全文本,我们应将UITextView页边距和空白去掉。


去掉页边距和空白之后的UITextView显示文本完全.png
上一篇下一篇

猜你喜欢

热点阅读