Проверка местоположения сопоставленного текста в границах UITextView с помощью Layout Manager - PullRequest
0 голосов
/ 09 апреля 2019

Мое приложение реализует функцию поиска, которая фильтрует объект данных класса и передает результаты в UITextView. Соответствующий текст поиска получает атрибут цвета. Приведенная ниже функция проверяет прямоугольник последнего индекса в массиве значений NSRange, собранных в результате поиска, и проверяет, находится ли прямоугольник последнего индекса в пределах bounds.height UITextView. Если функция возвращает false, я показываю кнопку инкремента, чтобы позволить пользователю перебирать результаты поиска, расположенные за пределами UITextView. Текст для поиска может быть длинным, поэтому полезна функция инкремента.

Эта функция работает 99% времени. Однако во время тестирования функция вернула значение true, когда прямоугольник последнего совпадения индекса находится в пределах границ. Высота визуального контроля UITextView НО показывает, что сопоставленный текст находится за пределами границ UITextView, т. Е. Один надо прокрутить вниз, чтобы увидеть это.

Я не понимаю, почему в 1% случаев прямоугольник сопоставленного текста поиска визуально находится за пределами границ UITextView, но менеджер компоновки обеспечивает прямоугольник сопоставленного текста поиска, который меньше высоты границ UITextView. Я явно что-то упускаю. Я думал, что ограничивающая прямоугольная функция менеджера компоновки - это способ получить запись глифа в 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...