[英]textViewDidChange is not call when change UITextView.inputView?
[英]contentOffset Changes when Setting UITextView Frame in textViewDidChange
我想设置一个高度UITextView
在动态textViewDidChange
。 我将框架调整到适当的高度,但是当高度大于我设置的阈值时,textView应该只用新线滚动。 但是, contentOffset
会搞砸,并且不会向下滚动以完全包含新行。
- (void)viewDidLoad
{
[super viewDidLoad];
_textView.frame = CGRectMake(60, 100, 200, _textView.contentSize.height);
_textView.scrollEnabled = NO;
}
- (void)textViewDidChange:(UITextView *)textView
{
NSLog(@"Offset: %f", _textView.contentOffset.y);
CGFloat height = _textView.contentSize.height;
_textView.scrollEnabled = NO;
if (_textView.contentSize.height >= 120) {
height = 120;
_textView.scrollEnabled = YES;
_textView.contentOffset = CGPointMake(0, _textView.contentSize.height - _textView.frame.size.height);
}
CGRect frame = _textView.frame;
frame.size.height = height;
_textView.frame = frame;
}
我想更容易解释发生的事情就是这个。 在完全空白的视图控制器上,在Storyboard中添加UITextView。 然后只将这三行添加到textViewDidChange:
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
textView的高度每增加一次,文本就不会垂直居中。 如果你滚动它然后放手它将返回到正确的位置。 框架始终是正确的尺寸。 这是contentOffset不太正确。
我想知道你是否可以发布一些关于你实际在做什么的代码?
我刚刚在5.0上试过这个,这很有效。
-(void) textViewDidChange:(UITextView *)textView {
int maxHeight = 30;
CGFloat height = [textView.text sizeWithFont:textView.font constrainedToSize:CGSizeMake(textView.frame.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;
CGRect rect = textView.frame;
rect.size.height = MIN(height, maxHeight);
[textView setFrame:rect];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.