gpt4 book ai didi

ios - 根据字体大小将文本滚动到 UITextView 中的特定点

转载 作者:行者123 更新时间:2023-12-01 22:15:40 29 4
gpt4 key购买 nike

当用户按下 TextView 本身之外的按钮时(在 iOS 上),我希望我的 UITextView 滚动到特定点(一个单词,或者更好的断点:>>>“)。字体大小可能因用户交互而异(即用户可以增大或减小字体大小)。文本本身由用户粘贴(交互添加断点)。

我试图通过获取断点 (">>>") 的 y 位置(以像素为单位)然后根据(使用 setContentOffset)设置 textView 的偏移量来实现这一点。

问题是我得到的 y 点是错误的!

这是我的代码片段(仅用于“>>>”重复):

NSRange range = [self.textview.text rangeOfString:@">>>"];

UITextPosition *beginning = self.textview.beginningOfDocument;
UITextPosition *start = [self.textview positionFromPosition:beginning offset:range.location];
UITextPosition *end = [self.textview positionFromPosition:start offset:range.length];
UITextRange *textRange = [self.textview textRangeFromPosition:start toPosition:end];
CGRect rect = [self.textview firstRectForRange:textRange];

[self.textview setContentOffset:CGPointMake(0, rect.origin.y)];

我的方法有什么问题?我觉得有更好(更简单)的方法来做同样的事情......

PS:我找到了另一个与相同问题相关的主题,但它很快,我无法翻译: Scroll UITextView to specific text

最佳答案

您需要转换 rect到 TextView 坐标空间。

试试这样:

// get the range
NSRange range = [self.textview.text rangeOfString:@">>>"];

// get the rect in the textview's coordinate space
CGRect foundRect = [self frameOfTextRange:range inTextView:self.textview];

// scroll the found rect into view
[self.textview setContentOffset:CGPointMake(0.0, foundRect.origin.y) animated:YES];

使用这种方法(在这里找到: https://stackoverflow.com/a/9606413/6257435):
- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
// ensure textview layouManager has been processed
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];

UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
CGRect rect = [textView firstRectForRange:textRange];
return [textView convertRect:rect fromView:textView.textInputView];
}

当然,您将需要添加错误处理(对于未找到的文本等)。

关于ios - 根据字体大小将文本滚动到 UITextView 中的特定点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52080711/

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