はじめに
TwitterやInstagramのようなTabBarのitemを選択したら一番上までスクロールするあれを実装したかった。
古い記事が多かったので、書いてみました。
実行環境
Swift5
Xcode 12.4
コード
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        let tabBarIndex = tabBarController.selectedIndex
        if tabBarIndex == 0 && tabBarController.selectedViewController == tabBarController.viewControllers?[0] {
            let indexPath = NSIndexPath(row: 0, section: 0)
            let navVC = viewController as? UINavigationController
            let yourVC = navVC?.viewControllers[0] as? YourViewController
            yourVC?.tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true)
        }
        return true
    }
条件がtabBarIndexだけだと、画面の切替時にも一番上までスクロールしてしまうので、
選択されているVCを論理積で指定しました。
上のコードの問題点(追記)
・TabBarの切替時 layerにアニメーションを付けたとき、viewControllers[0]から遷移するときだけアニメーションがつかなくなってしまう。
・もっとシンプルに。
→内部パラメータviewControllerに変えました。
if tabBarIndex == 0 && tabBarController.selectedViewController == viewController
おわりに
少し沼ったので共有させていただきました。