0

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

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

IB设置

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

UITextView 中的文本渲染示例

我猜这与新的 TextKit 框架有关,我使用NSLayoutManager's 和NSTextContainer's 属性来尝试控制这种行为,但无济于事。

另请注意,如果我“硬编码”文本视图的宽度(例如使用宽度约束),字符会正确附加在行尾,但随后我会丢失文本视图的水平自动调整大小属性。

我怎样才能表明UITextView我不希望它断线?

编辑:经过进一步测试,该错误似乎只出现在 32 位拱门上。

4

2 回答 2

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];
}

惹恼了我一段时间,希望对其他人有所帮助:)

于 2014-07-08T15:03:31.583 回答
0

这显然已在 iOS 8 中得到修复。(Xcode 6.0.1 (6A317))。

于 2014-09-22T14:48:54.567 回答