0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TabBarControllerのitem選択時にTableViewの一番上までスクロール

Last updated at Posted at 2021-02-27

##はじめに
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

##おわりに
少し沼ったので共有させていただきました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?