LoginSignup
2
4

More than 3 years have passed since last update.

UITableViewやUICollectionViewをスクロールで閉じる

Posted at

TableViewやCollectionViewでスクロールで一番上までいってたら(contentOffset.yがマイナスだったら)閉じたい場合がたまにある。
PanGestureを使って細やかにハンドリングした方が手触り感としては良くできるのだが若干手間ではある。
この方法だととてもシンプルに実装できたのでメモ。

// テーブルビュー

import UIKit

class TableViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var dataSource: UITableViewDataSource!

    override func viewDidLoad() {
        super.viewDidLoad()
        configure()
    }

    func configure() {
        dataSource = UITableViewDataSource()
        tableView.dataSource = dataSource
        tableView.delegate = self
    }

}


extension TableViewController: UITableViewDelegate {
}

extension TableViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let contentOffsetY = scrollView.contentOffset.y + view.safeAreaInsets.top // StatusBar, NavigationBarの高さを足してオフセットを0に
        let threshold: CGFloat = -60.0 // どの程度マイナス方向にスクロールしたらdismissするか
        if contentOffsetY < threshold {
            dismiss(animated: true, completion: nil)
        }
    }

}
// コレクションビュー

import UIKit

class CollectionViewController: UIViewController {

    @IBOutlet weak var collectionView: UICollectionView!
    var dataSource: UICollectionViewDataSource!

    override func viewDidLoad() {
        super.viewDidLoad()
        configure()
    }

    func configure() {
        dataSource = UICollectionViewDataSource()
        collectionView.dataSource = dataSource
        collectionView.delegate = self
    }

}


extension CollectionViewController: UICollectionViewDelegate {
}

extension CollectionViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let contentOffsetY = scrollView.contentOffset.y + view.safeAreaInsets.top // StatusBar, NavigationBarの高さを足してオフセットを0に
        let threshold: CGFloat = -60.0 // どの程度マイナス方向にスクロールしたらdismissするか
        if contentOffsetY < threshold {
            dismiss(animated: true, completion: nil)
        }
    }

}
2
4
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
2
4