2014-02-05 14 views
2

我有一個內容和幀大小等於348的UITextView,但是隻要文本寬度超過338.61就會出現換行。有誰知道爲什麼會發生這種情況?我怎樣才能訪問UITextView動態地用於換行的寬度?UITextView Word Wrapping意外的行爲

回答

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與無插圖渲染(所以它例如,匹配一個UILabel),你可以。

+0

非常感謝。它確實有幫助。我無法在其他地方找到這個。 – neo

0

上面的答案沒有錯,但我一直在研究UITextView的單詞包裝行爲,並發現儘管可以調整textview的contentSize和textContainer的相應大小,但另一種方法是更改​​文本換行位置(使用自動佈局時)是將SuperView的尾部空間變爲負值。這將允許用戶將文字包裝功能向外推到右側。尚未完成研究,但此提示應該有助於任何人尋求更好地控制UITextView文字包裝行爲。

一旦我完成後會發布代碼,但現在調整UITextView的拖尾約束將移動單詞/字符換行的最右邊位置。