##はじめに
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
##おわりに
少し沼ったので共有させていただきました。