iOS 7使用AutoLayout自动调整UITextView会随机中断行

时间:2014-04-29 14:50:12

标签: ios cocoa uitextview autolayout textkit

我希望有一个简单的UITextView自动调整大小以适应其内容。

使用AutoLayout这非常简单:我将UITextView添加到我的视图中,设置两个约束以将UITextView锚定在左上角,禁用滚动以及它。

IB setup

预期的行为是每次输入字符时绿色文本视图都会调整其框架的大小。但这只是部分工作:对于某些文本,文本视图决定它将它呈现在两行上,而不是仅在当前行的末尾添加新字符:

Examples of text rendering in a UITextView

我猜这与新的TextKit框架有关,我使用NSLayoutManagerNSTextContainer的属性来尝试控制此行为,但无济于事。

另请注意,如果我"硬编码"文本视图的宽度(例如带宽度约束),字符正确地附加在行的末尾,但后来我丢失了文本视图的水平自动调整属性。

如何向UITextView表明我不希望它突破?

编辑:在further testing之后,该错误似乎只出现在32位拱门上。

2 个答案:

答案 0 :(得分:1)

有点骇客(并且希望它在iOS8中得到修复),但以下内容阻止了它的发生:

- (void)textViewDidChange:(UITextView *)textView {

    // uber hack to stop characters from jumping to the line below
    if (textView.text.length == 1 && ![textView.text isEqualToString:@" "]) {
        NSRange cursorPosition = [textView selectedRange];
        textView.text = [NSString stringWithFormat:@"%@ ", textView.text];
        textView.selectedRange = cursorPosition;
    }

    [textView invalidateIntrinsicContentSize];
}

惹恼了我一段时间,希望能帮助别人:)

答案 1 :(得分:0)

现在显然已经在iOS 8中修复了。(Xcode 6.0.1(6A317))。