将UITextView框架设置为内容大小不再适用于Xcode 5

Sil*_*tar 11 objective-c xcode5

下面的代码片段用于在安装Xcode 5之前将UITextView框架的大小调整为其内容高度,但自升级后它不起作用:

CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)

我搜索过,但没有找到修复程序.有什么想法吗?

jar*_*air 26

在iOS 7上有新功能.

要在文本视图更新其文本后获取文本视图使用的"拟合"大小,请调用usedRectForTextContainer:textView的layoutManager属性,将textView的textContainer属性作为参数传递.

关于滚动的警告:但是,建议在文本视图更新文本视图更改文本视图的框架大小,如果在文本视图中禁用滚动,则会出现意外的视觉错误.如果发生这种情况,请在编辑文本视图的文本之前设置滚动,然后在更新后禁用它(如果需要滚动以保持禁用状态).


Mat*_*ira 14

要在iOS 7(Xcode 5)中工作,只需:

  1. 通过设置:给整个空间接收文本:

    [myTextView setScrollEnabled:YES];

  2. 传递真实文字:

    myTextView.text = theTextVariable; 要么 myTextView.text = @"The text...";

  3. 自动调整textView:

    [myTextView sizeToFit];

  4. 禁用滚动:

    [myTextView setScrollEnabled:NO];

PS:myTextView也可以用作self.myTextView或_myTextView

玩得开心!


c r*_*ald 6

我相信强制textView更新其contentSize的正确方法是通过调用

[textView layoutIfNeeded]
Run Code Online (Sandbox Code Playgroud)

但是,在iOS 7.0和7.1中,除非您首先设置,否则这似乎仍然无法可靠地工作

textView.layoutManager.allowsNonContiguousLayout = false;
Run Code Online (Sandbox Code Playgroud)

我不清楚这是不是一个错误,因为我无法真正找到一个很好的解释"非连续布局"甚至意味着什么.

(我的个人用例是以textView.text = newValue编程方式更新,然后尝试适当地调整textView的大小.)