Прокрутите UIViewController вверх, как это делается при нажатии на строке состояния iOS - PullRequest
0 голосов
/ 02 января 2019

Я хотел бы знать, доступен ли нам метод, который Apple использует для прокрутки UIViewController, который содержит UIScrollView, когда пользователь нажимает на строку состояния.

Я пытался найти его, но безуспешно.

Я пытался воспроизвести его, но он не работал на 100%, когда UIViewController предпочитает отображать большой заголовок (большойзаголовок не расширен).

Как мы можем прокрутить UIViewController к вершине, как это делает Apple?


После моего испытания:

extension UIViewController {

    private var firstScrollView: UIScrollView? {
        var scrollView: UIScrollView? = nil

        var viewsToCheck = [self.view]
        while !viewsToCheck.isEmpty && scrollView == nil {
            let viewToCheck = viewsToCheck.remove(at: 0)!

            if let viewToCheckAsScrollView = viewToCheck as? UIScrollView {
                scrollView = viewToCheckAsScrollView
            } else {
                viewsToCheck.append(contentsOf: viewToCheck.subviews)
            }
        }

        return scrollView
    }

    func scrollToTheTop(animated: Bool) {
        if let firstScrollView = firstScrollView {
            firstScrollView.scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated: true)
        }
    }
}

1 Ответ

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

Вы должны учитывать вкладку содержимого представления прокрутки (adjustedContentInset), когда решаете, где прокрутить. Ваш код этого не делает, поэтому вы прокручиваете в неправильное место.

firstScrollView.contentOffset.y = -firstScrollView.adjustedContentInset.top
...