调整UITextView的大小

sai*_*esh 26 iphone uitextview

我有一个UITextView补充UIView.添加的textview不可编辑,只是显示一些数据.textview中显示的数据是动态的.那是线数不固定.它可能会有所不同 因此,如果行数增加,则还需要增加textview的大小.我不知道如何做到这一点.请给我一些想法.

更新:

这是我正在做的事情:

UIView *baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)];
baseView.backgroundColor = [UIColor grayColor];
[window addSubview:baseView];

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(5, 30, 100, 30)];
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
textView.text = @"asdf askjalskjalksjlakjslkasj";
[textView sizeToFit];
[baseView addSubview:textView];
Run Code Online (Sandbox Code Playgroud)

Gab*_*abe 58

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

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

或更好(考虑到内容感谢kpower的评论)

CGRect frame = _textView.frame;
UIEdgeInsets inset = textView.contentInset;
frame.size.height = _textView.contentSize.height + inset.top + inset.bottom;
_textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)

注意:如果要多次引用对象的属性(例如frame或contentInset),最好将其分配给局部变量,这样就不会触发额外的方法调用(_textView.frame/[_ textView frame]是方法调用).如果你经常调用这段代码(100000次),那么这将明显变慢(十几个方法调用是无关紧要的).

但是......如果你想在没有额外变量的情况下在一行中这样做,那就是

        _textView.frame = CGRectMake(_textView.frame.origin.x, _textView.frame.origin.y, _textView.frame.size.width, _textView.contentSize.height + _textView.contentInset.top + _textView.contentInset.bottom);
Run Code Online (Sandbox Code Playgroud)

以5个额外的方法调用为代价.

  • `frame.size.height = _textView.contentInset.top + _textView.contentInset.bottom + _textView.contentSize.height;` (7认同)

Can*_*der 29

你可以使用setFrame:sizeToFit.

更新:

我用sizeToFitUILabel,它工作得很好,但UITextView就是一个子类UIScrollView,所以我能理解为什么sizeToFit不会产生期望的结果.

您仍然可以计算文本高度和使用setFrame,但UITextView如果文本太长,您可能希望利用滚动条.

以下是获取文本高度的方法:

#define MAX_HEIGHT 2000

NSString *foo = @"Lorem ipsum dolor sit amet.";
CGSize size = [foo sizeWithFont:[UIFont systemFontOfSize:14]
              constrainedToSize:CGSizeMake(100, MAX_HEIGHT)
                  lineBreakMode:UILineBreakModeWordWrap];
Run Code Online (Sandbox Code Playgroud)

然后你可以用你的UITextView:

[textView setFont:[UIFont systemFontOfSize:14]];
[textView setFrame:CGRectMake(5, 30, 100, size.height + 10)];
Run Code Online (Sandbox Code Playgroud)

或者您可以先进行高度计算并避开该setFrame行:

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(5, 30, 100, size.height + 10)];
Run Code Online (Sandbox Code Playgroud)

  • Gabe,正确答案如下.它不依赖于神奇的+10并且更准确. (3认同)