【问题标题】:Scroll to a specific part of a UITextView in Swift在 Swift 中滚动到 UITextView 的特定部分
【发布时间】:2016-09-06 14:32:12
【问题描述】:

在我正在创建的 Swift 应用程序中,用户可以在文本视图中键入一些文本,然后在其中搜索特定字符串,就像在 Pages(以及许多其他)中一样。

我有他们正在搜索的字符的index 作为整数(即​​,他们在他们输入的大量文本块中的第三个“hello”实例中,我知道这是第 779 个字母文本视图),我正在尝试自动将文本视图滚动到它们所在的字符串,以便它弹出(就像在 Pages 中一样)。

我正在尝试使用此命令跳转到适用的字符串:

self.textview.scrollRangeToVisible(NSMakeRange(index, 0))

但它永远不会跳到正确的位置(有时太低,有时太高),通常取决于屏幕大小,所以我知道index 不属于那里。

如何通过使文本视图滚动到某个字符来正确地允许用户跳转到文本视图中的特定字符串?

【问题讨论】:

    标签: ios swift scroll uitextview


    【解决方案1】:

    可以获取索引779之前的字符串,然后计算这个字符串的高度,然后滚动到这个点。

    let string = textView.text.substringWithRange(Range<String.Index>(start: textView.text.startIndex, end: textView.text.startIndex.advancedBy(779)))// your <779 string
    let size = string.sizeWithAttributes([NSFontAttributeName:yourFont])
    let point = CGPointMake(0, size.height)
    scrollView.setContentOffset(point, animated:true)
    

    【讨论】:

    • 感谢您的回答!一个问题:在第一行,我收到Cannot invoke initializer for type 'Range&lt;Index&gt;' with an argument list of type '(start: Index, end: String.CharacterView.Index)'。我应该注意我使用的是 Swift 3。
    • @JohnRamos 只是尝试文字,而不是 Range 使用类似 textView.text.startIndex..
    • Swift 3 中没有 advancedBy 函数!!
    • this answer 协调,您的代码完全可以工作。感谢您的帮助!
    • 我不明白这怎么可能工作,sizeWithAttributes 返回字符串的大小而不考虑它打印的文本视图,这意味着高度不会考虑自动换行。那么它怎么可能返回一个高度,您可以使用它来滚动到 textview 中的正确位置,这可能是在一些地方换行。
    【解决方案2】:

    另一个答案似乎不再起作用(2021 年 1 月)。但是现在有一个更简单的方法:

    // Range specific to the question, any other works
    let rangeStart = textView.text.startIndex
    let rangeEnd = textView.text.index(rangeStart, offsetBy: 779)
    let range = rangeStart..<rangeEnd
    
    // Convert to NSRange
    let nsrange = NSRange(range, in: textView.text)
    
    // ... and scroll
    textView.scrollRangeToVisible(nsrange)
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2016-08-11
      • 2013-05-17
      相关资源
      最近更新 更多