layoutIfNeeded вызывает сбой - PullRequest
0 голосов
/ 19 января 2019

У меня есть UITextView, который отображает текст Когда текст не очень большой (я говорю о 100-200 словах), приложение работает просто отлично

Если он содержит чрезвычайно большие тексты (около 10000 слов), он продолжает падать

код

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    check(scrollView)
    let scrollPos = textView.contentOffset.y

    if dragging { return }
    if isAppearanceOpened { return }

    if scrollPos > 0 {
        UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations: {
            if scrollPos <= self.contentOffset {
                self.topView.alpha = 1
                self.pageView.alpha = 1
                self.topViewHeight.constant = 70
            } else {
                self.topView.alpha = 0
                self.pageView.alpha = 0
                self.topViewHeight.constant = 0
            }
            self.view.layoutIfNeeded()
        }) { (_) in
            if !decelerate { self.recheckEditorPosition() }
        }
    } else {
        UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations: {
            self.topView.alpha = 1
            self.pageView.alpha = 1
            self.topViewHeight.constant = 70
        }) { (_) in
            if !decelerate { self.recheckEditorPosition() }
        }
    }
}

Ошибка

EXC_BAD_ACCESS (код = 2, адрес = 0x16d2a7ef0)

Консоль понятна, поэтому я немного запутался Если я удаляю self.view.layoutIfNeedee(), приложение работает нормально, но анимация отсутствует

1 Ответ

0 голосов
/ 19 января 2019

Итак, я получил результат из своего исследования Сбой был вызван textView contentInset. Когда левая и правая вставки равны 0, это хорошо работает с большими текстами, и я предполагаю, что вычисление выравниваний, шрифтов и т. Д. TextView занимает довольно много времени, поэтому компилятор просто выдал ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...