为了账号安全,请及时绑定邮箱和手机立即绑定

如何调整UITextView的内容大小?

如何调整UITextView的内容大小?

iOS
富国沪深 2019-06-05 16:07:26
如何调整UITextView的内容大小?有什么好方法来调整UITextView以符合它的内容?比如说我有一个UITextView其中包含一行文本:"Hello world"然后,我添加另一行文本:"Goodbye world"可可有什么好办法rect它将容纳文本视图中的所有行,这样我就可以相应地调整父视图了吗?作为另一个例子,查看Calendar应用程序中事件的Notes字段-注意单元格(以及UITextView它包含)展开,以保存注释字符串中的所有文本行。
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

这适用于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中与SWIFT4.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;


查看完整回答
反对 回复 2019-06-05
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

这不再适用于iOS 7或更高版本。

实际上,有一种非常简单的方法来调整UITextView内容的正确高度。可以使用UITextView contentSize.

CGRect frame = _textView.frame;frame.size.height = _textView.contentSize.height;_textView.frame = frame;

有一点要注意的是,正确的contentSize只提供这个UITextView已添加到视图中的addSubview..在此之前,它等于frame.size

如果自动布局启动,这将无法工作。对于自动布局,一般方法是使用sizeThatFits方法并更新constant值在高度约束上。

CGSize sizeThatShouldFitTheContent = [_textView sizeThatFits:_textView.frame.size];
heightConstraint.constant = sizeThatShouldFitTheContent.height;

heightConstraint是一个布局约束,您通常通过IBOutlet将属性链接到故事板中创建的高度约束来设置该约束。


为了补充这个惊人的答案,2014年,如果你:

[self.textView sizeToFit];

iPhone 6+只有:


对于6+(而不是5s或6),它确实在UITextView中添加了“多一个空行”。“RL解决方案”完美地解决了这一问题:

CGRect _f = self.mainPostText.frame;_f.size.height = self.mainPostText.contentSize.height;self.mainPostText.frame = _f;

它解决了6+上的“额外行”问题。


查看完整回答
反对 回复 2019-06-05
  • 2 回答
  • 0 关注
  • 811 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信