ios - 如何根据其内容调整 UITextView 的大小?

标签 ios cocoa-touch autolayout uikit uitextview

是否有调整 UITextView 大小以符合其内容的好方法?比如说我有一个包含一行文本的 UITextView:

"Hello world"

然后我添加另一行文本:

"Goodbye world"

在 Cocoa Touch 中有没有一种好的方法来获取 rect 来保存 TextView 中的所有行,以便我可以相应地调整父 View ?

作为另一个示例,查看日历应用程序中事件的注释字段 - 注意单元格(及其包含的 UITextView)如何扩展以容纳注释字符串中的所有文本行.

最佳答案

这适用于 iOS 6.1 和 iOS 7:

- (void)textViewDidChange:(UITextView *)textView
{
    CGFloat fixedWidth = textView.frame.size.width;
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    CGRect newFrame = textView.frame;
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
    textView.frame = newFrame;
}

或在 Swift 中(适用于 iOS 11 中的 Swift 4.1)

let fixedWidth = textView.frame.size.width
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)

如果您希望支持 iOS 6.1,那么您还应该:

textview.scrollEnabled = NO;

关于ios - 如何根据其内容调整 UITextView 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50467/

相关文章:

android - 在 C++ 中创建临时文件

ios - iPhone 上的准确时间

ios - 由于自动布局和大量 subview ,关闭 VC 非常慢

ios - 无法同时满足约束。尽管没有定义重复/不需要的约束

ios - 等到 Boolean 在 Swift 中为真?

ios - 如何将导航 Controller 嵌入到标签栏 Controller

ios - 从 iOS 中的代码创建 localized.strings

ios - 检查哪个委托(delegate)插入模态视图 Controller 的优雅解决方案是什么?

ios - 如何使用自动布局在 Controller 中移动 UIView

ios - 自定义单元格重复