Как прокручивать сверху после прокрутки вниз, как в Facebook - Swift 4.2

Я хочу реализовать функцию прокрутки, такую ​​как приложение Facebook, где нажмите на элемент панели вкладок при прокрутке страницы вниз и нажмите на тот же элемент панели вкладок, который начинает прокручиваться сверху.

Вот мой код -

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

        let indexOfTab = tabBar.items?.index(of: item)
        if indexOfTab == 0{
            let feed = HomeFeedViewController()
            feed.scrollToTop()
            print("pressed tabBar: \(String(describing: indexOfTab))")
        }else if indexOfTab == 1{
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }else if indexOfTab == 2{
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }else if indexOfTab == 3{
            let feed = QueueViewController()
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }else if indexOfTab == 4{
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }

    }


 func scrollToTop(){

        feedsTableView.setContentOffset(.zero, animated: true)
    }

попробуйте указать коды, по которым мы можем предложить

Subhajit Halder 10.08.2018 12:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
352
2

Ответы 2

Пожалуйста, попробуйте мой код

var canScrollToTop:Bool = true
    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {

        // Allows scrolling to top on second tab bar click
        if (viewController.isKindOfClass(CustomNavigationBarClass) && tabBarController.selectedIndex == 0) {
            if (viewControllerRef!.canScrollToTop) {
                viewControllerRef!.scrollToTop()
            }
        }
    }


    // Scrolls to top
    func scrollToTop() {
        self.View.setContentOffset(CGPoint.zero, animated: true)
    self.tblView.setContentOffset(CGPoint.zero, animated: true)
    self.collView.setContentOffset(CGPoint.zero, animated: true)
    }


    // Called when the view becomes available
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        canScrollToTop = true
    }

    // Called when the view becomes unavailable
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        canScrollToTop = false
    }

Для Свифта

extension UIViewController {
    func scrollToTop() {
        func scrollToTop(view: UIView?) {
            guard let view = view else { return }

            switch view {
            case let scrollView as UIScrollView:
                if scrollView.scrollsToTop == true {
                    scrollView.setContentOffset(CGPoint(x: 0.0, y: -scrollView.contentInset.top), animated: true)
                    return
                }
            default:
                break
            }

            for subView in view.subviews {
                scrollToTop(view: subView)
            }
        }

        scrollToTop(view: self.view)
    }
}

Использовать

var previousController: UIViewController?

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

        //when user is in FeedViewController and scroll at last record and want to
        if previousController == viewController {
            if let navVC = viewController as? UINavigationController, let vc = navVC.viewControllers.first as? HomeViewController {

                if vc.isViewLoaded && (vc.view.window != nil) {
                    vc.scrollToTop()
                }
                print("same")
            }
        }
        else{
            print("No same")
        }

        previousController = viewController
        return true;
    }

Я делаю отдельный класс для контроллера tabBarr и доступа в HomeFeedViewController. Итак, где писать этот код

iHarshad 10.08.2018 13:10

реализовать этот метод делегата для отдельного класса для контроллера tabBarr и проверить.

Hardik Thakkar 10.08.2018 13:11

Вам нужно нажать дважды, если нажмите еще раз, и он напечатает «то же самое» в журнале, в то время он поднимется. попробуй отладить твой случай

Hardik Thakkar 10.08.2018 14:51

Мой tableview не будет получать доступ, всегда получаю нулевые значения при нажатии несколько раз

iHarshad 10.08.2018 15:17

В моем tableview есть 7 пользовательских ячеек, когда я нажимаю на кнопку первой панели вкладок, затем происходит сбой из-за неожиданного значения nil для tableview.

iHarshad 10.08.2018 15:28

Другие вопросы по теме