UITextView改变高度而不是滚动

6

默认情况下,UITextView的contentView会在文本内容超出其高度时变得可滚动。

我想要禁用此功能,而是更新UITextView的高度以适应文本。我这样做的原因是因为我将UITextView添加为UIScrollView的子视图,后者应该处理滚动,就像在本机邮件应用程序中一样(当您输入文本时,整个视图都会向上滚动,而不仅仅是textview)。

有人有想法/遇到过相同的问题吗?

2个回答

20

可以非常简单地完成如下:

CGRect frame = textView.frame;

frame.size = textView.contentSize;

textView.frame = frame;

这应该将TextView的高度设置为适当地适合其所有内容。


太好了。我必须添加一些东西,因为评论格式的原因,我会在新答案中发布它们。 - Tom Irving
这在iOS5上运行良好,但由于某种原因,在iOS4上光标始终想要漂移到视图的边界之外。 - Ray Fix
iPhone 6 Plus上有bug。 - frank

9
一些小改动:
-(void)textViewDidChange:(UITextView *)textView {

    CGFloat fontHeight = (textView.font.ascender - textView.font.descender) + 1;

    CGRect newTextFrame = textView.frame;
    newTextFrame.size = textView.contentSize;
    newTextFrame.size.height = newTextFrame.size.height + fontHeight;
    textView.frame = newTextFrame;
}

在输入错误时,添加字体高度可以给自动纠错框留出空间。

UITextView 也应该设置为不滚动:

[aTextView setScrollEnabled:NO];

这个如何处理将视图滚动到光标的位置? - James Wald
您还可以设置textView.clipsToBounds = NO;,以使自动更正框不被裁剪。 - Ray Fix
它被键盘剪裁,而不是文本视图。 - Tom Irving
根据textViewDidChange的文档: 当用户对文本进行更改时,文本视图会调用此方法。该方法不会在程序上发起的更改的响应中被调用。 - tumbudu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接