gpt4 book ai didi

swift - ScrollRectToVisible 显示匹配的搜索字符串以滚动到 UITextView 的中间 View

转载 作者:行者123 更新时间:2023-11-30 10:48:11 28 4
gpt4 key购买 nike

我有一个 UiTextView 用于显示详细文本。有时文本可能足够长,可以滚动浏览。有时,文本可能足够短,足以适合 UITextView 的框架。

我还实现了一项搜索功能,可用于搜索较长的文本字符串。该函数将字体颜色属性添加到与搜索输入字符串匹配的文本。该函数为每个匹配的搜索字符串输入收集 NSRange 值的数组。我使用正则表达式来匹配搜索字符串并返回每个匹配的 NSRange 值数组。

我目前正在开发一个函数,可以将用户动画移动到匹配搜索字符串的 UITextView 位置。

稍后我将提供一个按钮,用户可以单击该按钮来循环浏览比赛。

到目前为止,一切都运行良好。请参阅下面的代码。 detailText 是 UITextView:

    // rangeOfSearchText uses a regex to return the range of the match. For text purposes, the function returns the first index only. 

let rangeOfMatch = rangeOfSearchText(searchString: self.searchText!, UIText: self.detailText.text)

let glyRange = self.detailText.layoutManager.glyphRange(forCharacterRange: rangeOfMatch, actualCharacterRange:nil)

let rect = self.detailText.layoutManager.lineFragmentRect(forGlyphAt: NSMaxRange(glyRange), effectiveRange: nil)
self.detailText.scrollRectToVisible(rect, animated: true)

虽然代码运行良好,但匹配的文本显示在生成的 UITextView 框架的底部。我希望匹配的文本出现在 View 中间。我尝试了以下有点有效的代码:

self.detailText.contentOffset.y = 200      

contentOffset 仅当匹配的文本范围位于较大的多行字符串的中间时才按预期工作。如果匹配的文本范围位于字符串的开头,则实现 contentOffset 会将用户滚动超过匹配的文本 200。基本上,匹配的文本会滚动到 View 之外。那可不行。如果匹配的文本位于多行文本的末尾,contentOffset 将添加更多空白以将匹配的文本放置在 View 的中间。这两种结果都不是我们想要的。我可以接受后者,但前者不好,因为它将第一个匹配的文本向上滚动到 View 之外。

我在堆栈溢出上搜索了类似的问题,但找不到。如果确实存在,请指出。如果没有,欢迎任何建议。

最佳答案

这似乎有效:

if rect.minY >= detailText.frame.height/2 {

self.detailText.scrollRectToVisible(rect.offsetBy(dx: 0.0, dy: detailText.frame.height/2), animated: true)

}

关于swift - ScrollRectToVisible 显示匹配的搜索字符串以滚动到 UITextView 的中间 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55329737/

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