3

我正在尝试UITextView动态设置 a 的高度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 不太正确。

4

1 回答 1

0

我想知道你是否可以发布一些关于你实际在做什么的代码?

我刚刚在 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];

}

于 2013-04-06T22:32:25.273 回答