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
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个额外的方法调用为代价.
Can*_*der 29
你可以使用setFrame:或sizeToFit.
更新:
我用sizeToFit用UILabel,它工作得很好,但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)
| 归档时间: |
|
| 查看次数: |
53997 次 |
| 最近记录: |