выделите верхнюю часть таблицы и покажите большой заголовок iOS - PullRequest
0 голосов
/ 11 марта 2020

Я хочу прокрутить до верха моего tableView, а также показать largeTitle в navigationBar, когда я нажимаю на вкладку в панели вкладок.

Использование метода scrollToRow не показывает largeTitle:

extension TableViewConstroller: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        if tabBarController.selectedIndex == 1 {
            let indexPath = IndexPath(row: 0, section: 0)
            tableView.scrollToRow(at: indexPath, at: .top, animated: true)
        }
    }
}

Я также пытался

self.tableView.scrollRectToVisible(CGRect(x: 0, y: -64, width: 1, height: 1), animated: true)

Иногда это работает, но если я прокручиваю путь вниз tableView, navigationBar все еще сворачивается, когда этот метод прокручивается вверх.

Что я могу сделать, чтобы имитировать c поведение свойства tableView scrollsToTop, которое прокручивается вверх и показывает largeTitle? Он анимирует очень плавно и всегда показывает большие navigationBar.

1 Ответ

0 голосов
/ 16 марта 2020

Я использовал эти два метода внутри UITabBarControllerDelegate: второй метод ищет первый scrollView, а затем прокручивает до верха этого scrollView. И поскольку tableView также является scrollView, этот подход работает.

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if tabBarController.selectedViewController == viewController {
        if let scrollView = findScrollView(in: viewController.view) {
            let desiredOffset = CGPoint(x: 0, y: -scrollView.contentInset.top - 96 + UIApplication.shared.statusBarFrame.height)
            scrollView.setContentOffset(desiredOffset, animated: true)
        }
    }
    return true
}

private func findScrollView(in view: UIView) -> UIScrollView? {
    if let scrollView = view as? UIScrollView {
        return scrollView
    } else {
        for subview in view.subviews {
            if let scrollView = findScrollView(in: subview) {
                return scrollView
            }
        }
    }
    return nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...