【问题标题】:iOS 7 autoresizing UITextView with AutoLayout breaks line randomlyiOS 7 使用 AutoLayout 自动调整 UITextView 的大小会随机断行
【发布时间】:2014-04-29 14:50:12
【问题描述】:

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

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

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

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

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

我如何向UITextView 表明我不希望它断线?

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

【问题讨论】:

  • 您找到解决方案了吗?我查看了下面@danhopwood 的建议,但没有任何区别。
  • TBH,我把这个错误放在一边并继续前进(我知道我所有的用户都将运行 64 位设备)。希望它在 iOS 8 中得到修复...
  • 好的。因为我使用 UITextView 作为 UILabel 替换我最终只是在字符串的开头和结尾添加了一个空格字符。似乎工作得体......
  • 在文本末尾添加一个空格可以解决问题。

标签: ios cocoa uitextview autolayout textkit


【解决方案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];
}

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-05
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多