gpt4 book ai didi

ios - 如何在键入/编辑时使 UITextView 滚动

转载 作者:IT王子 更新时间:2023-10-29 07:53:27 24 4
gpt4 key购买 nike

更新这似乎只是 IOS 7 的问题。一个很好的解决方法已添加到已接受的答案中。

我创建了一个包含 UITextView 和 UILabel 的自定义控件,其中包含 TextView 的标题,即我的控件。我的控件会自动更改大小以适应 TextView 和标题。在此之前,我更改了 TextView 的大小以适合文本。这最有效。

我添加了功能,因此 TextView 会自动滚动到最后一行。或者这至少是我正在尝试的。只要最后一行不包含空文本,它就可以正常工作。如果文本为空,它会向下滚动,因此您只能看到大约一半的光标。

我做错了什么?

所以你可以更好地理解我做了一些图片:

这是我输入一个词并进行一些换行。 (仍然不足以让它滚动)

Before making a line break

然后我换行。 (按 enter)仔细观察光标是如何减半的。这就是问题所在!

The Issue

我制作了下一张图片,因此您可以准确地看到我的预期。

What I Want!

最佳答案

其他答案的问题:

  • 当只扫描“\n”时,如果您输入的文本行超过 TextView 的宽度,则不会发生滚动。
  • 当始终在 textViewDidChange: 中设置 contentOffset 时,如果您编辑文本的中间,您不想滚动到底部。

解决方案是将其添加到 TextView 委托(delegate)中:

- (void)textViewDidChange:(UITextView *)textView {
CGRect line = [textView caretRectForPosition:
textView.selectedTextRange.start];
CGFloat overflow = line.origin.y + line.size.height
- ( textView.contentOffset.y + textView.bounds.size.height
- textView.contentInset.bottom - textView.contentInset.top );
if ( overflow > 0 ) {
// We are at the bottom of the visible text and introduced a line feed, scroll down (iOS 7 does not do it)
// Scroll caret to visible area
CGPoint offset = textView.contentOffset;
offset.y += overflow + 7; // leave 7 pixels margin
// Cannot animate with setContentOffset:animated: or caret will not appear
[UIView animateWithDuration:.2 animations:^{
[textView setContentOffset:offset];
}];
}
}

关于ios - 如何在键入/编辑时使 UITextView 滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070537/

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