我有一个带有大文本的uitextview,上面有一个搜索字段。搜索到的任何内容,我都希望uitextview能够滚动到特定的文本和高光。我需要确保uitextview以一种搜索文本保留在第一行的方式滚动
我使用带有某些属性的属性文本填充textview。我尝试的是获取目标文本之前的文本,并尝试获取它的大小,添加我在开头的textview文本中添加的确切属性。
使用该高度制作CGPoint并设置uitextview的contentOffset。但是textview在目标文本附近没有滚动。也许我的方法是错误的,因为我在设置属性
时没有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)
}
}
}
}
答案 0 :(得分:3)
你的方法比它需要的要复杂得多。使用<!DOCTYPE html>
<html>
<body>
<div class="quantity-select">
<select name="quantity" id="quantity" onchange="updateNumbers()">
<option value="2">2 BAGS, $25</option>
<option value="3">3 BAGS, $35</option>
<option value="4">4 BAGS, $45</option>
<option value="5">5 BAGS, $55</option>
</select>
</div>
<div class="product-info">
<table>
<tr>
<td><span id="total-meals">10</span> MEALS PER BAG</td>
<td><span id="total-nuggs">50</span> TOTAL NUGGS</td>
</tr>
<tr>
<td><span id="chickens-saved">1</span> CHICK SAVED</td>
<td><span id="calories-saved">420</span> CALORIES SAVED</td>
</tr>
<tr>
<td><span id="water-saved">4</span> GALLONS OF WATER SAVED</td>
<td>100% MICROWAVABLE</td>
</tr>
</table>
</div>
</body>
</html>
的{{1}}方法。
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)
}
}
。如果您希望将所选范围放在顶部,请尝试使用此类似的内容而不是调用localizedStandardRange
:
selectedRange