在IOS7中使用UITextView的sizetofit方法时出现奇怪的问题

14
当我在IOS7模拟器上测试我的应用程序时,有时我发现使用UITextView的sizeToFit会出现奇怪的问题。sizeToFit之后的框架似乎没问题,但文本只能部分显示,就像下面的照片所示。(灰色区域代表sizeToFit后UITextView的新框架,整个句子应该是"which sparked a tense relationship between the two。")
UITextView文本是通过attributedText设置的。看起来这个问题只发生在某些句子上,并且对大多数句子来说都是正常的。
我遇到过这个问题几次了,但还没有解决。任何帮助将不胜感激。谢谢。
更新: 最终我用了一个丑陋的方法来解决这个问题。我重置了textView的文本。
NSString *text = textView.text;
textView.text = @"";
textView.text = text;

现在可以在调用 sizeToFit 后显示整个内容了。 我认为这似乎是 iOS 7 的一个错误。


1
增加Textview的框架高度。 - Romance
我已经将UITextView的背景颜色设置为灰色(如上图中灰色区域)。TextView框架高度足以显示整个文本。 - echo
或许是[textView setNeedDisplay]吗? - Kyle Fang
给Kyle Fang:感谢您的回复。我尝试过setNeedDisplay,但它没有起作用。 - echo
给CupraR_On_Rails: 最终我用一种不太好的方法解决了这个问题。我重置了textView的文本。NSString *text = textView.text; textView.text = @""; textView.text = text;我已经更新了我的原始帖子。 - echo
4个回答

18

我曾经也有同样的问题,花了一段时间才解决,你只需要调整文本容器的大小即可。

[textview sizeToFit];
[textview.textContainer setSize:textview.frame.size];

太好了,帮我省了很多时间。 - zimmryan

3

在 iOS7 中,注意到 sizeToFit 不起作用了 - 或许这个解决方案也能帮助你,需要额外的 layoutIfNeeded。

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
[UITEXTVIEW setTextContainerInset:UIEdgeInsetsMake(0, 0, 0, 0)];

这就是换行与不换行的区别 - 已保存!- 谢谢你和感谢 Apple 提供的默认填充/边距,这让我省去了好几天的工作 :) - Henry Heleine

0

你可以试试这个,对我很有效。

[textView setTextContainerInset:UIEdgeInsetsMake(0, 0, 0, 0)];

0
你在Interface Builder中是否勾选了“剪裁子视图”?
尝试取消勾选或将此属性设置为“NO”。

我通过编写代码创建UITextView,而不是使用界面构建器。 我找不到clipSubviews属性。 你可以给我一些提示吗? - echo
这可以通过设置"clipsToBounds = NO"来完成,但似乎并不能解决问题。 - alexshafran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接