Ahs*_*sim 6 uitextview nsattributedstring ios swift
我有一个带有大文本的 uitextview,上面有一个搜索字段。搜索任何内容,我都希望 uitextview 滚动到该特定文本和突出显示。而且我需要确保 uitextview 以这样一种方式滚动,即搜索到的文本保留在第一行
我用一些属性的属性文本填充了文本视图。我尝试的是在目标文本之前获取文本,并尝试获取它的大小,添加我在开始时在 textview 文本上添加的确切属性。
使用该高度制作了一个 CGPoint 并设置了 uitextview 的 contentOffset。但是文本视图在目标文本附近没有滚动。也许我的方法是错误的,因为我在设置属性时没有 textview 的宽度
我的代码是:
func goToBla() {
if let string = ayatTextView.text {
if let range = string.range(of: tazweedAyahas[8].text) {
let firstPart = string[string.startIndex..<range.lowerBound]
print("before \(tazweedAyahas[5].text) : ")
print(firstPart)
if let otherStr = firstPart as? NSString {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
let size = otherStr.size(withAttributes: [NSAttributedStringKey.paragraphStyle: paragraphStyle,
NSAttributedStringKey.font: UIFont(name: "me_quran", size: 30)
])
let point = CGPoint(x: 0, y: size.height)
ayatTextView.setContentOffset(point, animated: true)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你的方法比它需要的要复杂得多。使用 的scrollRangeToVisible方法UITextView。
func goToBla() {
if let string = ayatTextView.text, let range = string.localizedStandardRange(of: tazweedAyahas[8].text) {
let viewRange = NSRange(range, in: string)
ayatTextView.selectedRange = viewRange // optional
ayatTextView.scrollRangeToVisible(viewRange)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意以下事项:
localizedStandardRange如果您想忽略变音符号和大小写,并且您需要其他特定于语言环境的搜索功能,请在搜索时使用。selectedRange如果您希望选择匹配的文本,请致电。如果您想在顶部获得所选范围,请尝试这样的操作而不是调用scrollRangeToVisible:
let rect = ayatTextView.layoutManager.boundingRect(forGlyphRange: viewRange, in: ayatTextView.textContainer)
ayatTextView.contentOffset = CGPoint(x: 0, y: rect.origin.y)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |