小编典典

当 TabBarItem 被按下时,滚动回顶部(例如在 Reddit 应用程序上)

all

当我按下 TabBarItem 时,我有点难以实现“滚动到顶部”功能。到目前为止,我所做的是我在多个 stackoverflow 帖子中找到的科学怪人代码,它有效,但仅在某一点之前有效。

这是我到目前为止所做的是:

class MainViewController: UITabBarController, UITabBarControllerDelegate

将委托设置为自己

self.delegate = self

覆盖 func tabBar

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

UIViewController 的扩展

 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: view)
}

}

这是我目前卡住的地方:每当我按下 TabBarItem 时,我都会滚动回顶部。我想登顶。只有当我按下显示当前视图的 TabBarItem 时,我才想滚动回到顶部,当我更改选项卡时保持视图的当前状态。


阅读 77

收藏
2022-07-13

共1个答案

小编典典

在您的子类UITabBarController中,您可以覆盖didSelect item

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    // get the index of the item
    if let idx = tabBar.items?.firstIndex(of: item) {
        // if it is equal to selectedIndex,
        //  we tapped the current tab
        if idx == selectedIndex {
            print("same tab")

            // call your scroll to top func
            scrollToTop()

        }
    }
}
2022-07-13