UITextView Word Wrapping意外的行为

时间:2014-02-05 15:50:25

标签: ios ios7 uiscrollview uitextview

我有一个内容和帧大小宽度等于348的UITextView,但只要一行上的文字宽度超过338.61就会发生自动换行。有谁知道为什么会发生这种情况?如何动态访问UITextView用于自动换行的宽度?

2 个答案:

答案 0 :(得分:7)

从iOS 7开始,是的。它是textContainerInsetlineFragmentPadding的组合。

UITextView *textView = ...;
CGFloat wrappingWidth = textView.bounds.size.width - (textView.textContainerInset.left + textView.textContainerInset.right + 2 * textView.textContainer.lineFragmentPadding);

这是一个值得了解的好价值。您可以在boundingRectWithSize:来电中使用它,例如:

CGRect boundingRect = [text boundingRectWithSize:CGSizeMake(wrappingWidth, CGFLOAT_MAX)
                                         options:NSStringDrawingUsesLineFragmentOrigin // this is important
                                      attributes:@{ NSFontAttributeName: textView.font } // and any other attributes of your text
                                         context:nil];

同样很酷的是,您可以设置textContainerInsetlineFragmentPadding,因此如果您想要增加此值,或者拥有一个没有插入的呈现UITextView(因此它与{匹配} {1}},例如),你可以。

答案 1 :(得分:0)

上面的答案没有错,但我一直在研究UITextView自动换行行为,并发现尽管可以调整textview的contentSize和textContainer的相应大小,但还有一种更改文本换行位置的方法(当使用自动布局时)是将SuperView的尾随空间变为负值。这将允许人们将自动换行功能向外推到右侧。尚未完成研究,但这个提示应该帮助任何人寻求更好地控制UITextView自动换行行为。

一旦我完成就会发布代码,但是现在调整UITextView的尾随约束将移动单词/字符包装的最右边位置。