当我按下 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 时,我才想滚动回到顶部,当我更改选项卡时保持视图的当前状态。
在您的子类UITabBarController中,您可以覆盖didSelect item:
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() } } }