使用布局管理器测试匹配文本在UITextView边界中的位置

时间:2019-04-09 01:36:19

标签: swift uitextview

我的应用程序实现了搜索功能,该功能可以过滤类数据对象并将结果传递到UITextView。匹配的搜索文本具有颜色属性。下面的函数检查从搜索中收集的NSRange值数组中最后一个索引的rect,并测试最后一个索引的rect是否位于UITextView的bounds.height内。如果该函数返回false,则显示一个增量按钮,以允许用户迭代位于UITextView范围之外的搜索匹配项。搜索文本可能很长,因此增量器功能很有用。

该功能似乎在99%的时间内都有效。但是,在测试期间,当最后一个索引匹配的rect在边界之内时,该函数返回true。UITextView BUT 的高度视觉检查显示匹配的文本超出了UITextView的边界,即,必须向下滚动才能看到它。

我不明白为什么在1%的时间内,匹配的搜索文本的矩形在视觉上超出了UITextView的边界,但是布局管理器却提供了匹配的搜索文本的矩形,其小于UITextView的边界高。显然我缺少了一些东西。我认为布局管理器边界rect函数是在UITextView中获取字形记录的方法。

    func testForRectLocationOfLastMatch(arrayOfMatches:[NSRange], InTextView textView:UITextView) -> Bool{

    var rectOfLastIndex:CGRect = CGRect(x: 0, y: 0, width: 0, height: 0)       

    //get last value in array of ranges

    if let lastIndexMatch = arrayOfMatches.last {

    //get CGrect of the range

    rectOfLastIndex = textView.layoutManager.boundingRect(forGlyphRange: lastIndexMatch, in: textView.textContainer)

    }

    if rectOfLastIndex.maxY <= textView.bounds.height.rounded() {

        return false
    }

    return true
}

0 个答案:

没有答案