gpt4 book ai didi

ios - 在 textViewDidChange 中设置 UITextView Frame 时 contentOffset 发生变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:43 24 4
gpt4 key购买 nike

我正在尝试在 textViewDidChange 中动态设置 UITextView 的高度。我让框架调整到适当的高度,但是当高度大于我设置的阈值时,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;
}

我想这是一种更简单的解释正在发生的事情的方法。在一个完全空白的 View Controller 上,在 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];

关于ios - 在 textViewDidChange 中设置 UITextView Frame 时 contentOffset 发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com