web-dev-qa-db-fra.com

Détecter quand UITableView a fait défiler vers le bas

Le message suivant est-il toujours le moyen accepté de détecter le moment où une instance de UITableView a défilé jusqu'en bas [dans Swift] ou a-t-il été modifié (comme dans: amélioré) depuis?

Problème lors de la détection si UITableView a défilé jusqu'en bas

Je vous remercie.

14
Joseph Beuys' Mum

essaye ça 

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let height = scrollView.frame.size.height
    let contentYoffset = scrollView.contentOffset.y
    let distanceFromBottom = scrollView.contentSize.height - contentYoffset
    if distanceFromBottom < height {
        print(" you reached end of the table")
    }
}

ou vous pouvez trouver de cette façon 

if tableView.contentOffset.y >= (tableView.contentSize.height - tableView.frame.size.height) {    
    //you reached end of the table
}
43
Anbu.Karthik

Swift 3

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.row + 1 == yourArray.count {
        print("do something")
    }
}
28
Giang

Nous pouvons éviter d'utiliser scrollViewDidScrollet utiliser tableView:willDisplayCell

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.section == tableView.numberOfSections - 1 &&
        indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
        // Notify interested parties that end has been reached
    }
}

Cela devrait fonctionner pour un nombre quelconque de sections .

1
JPetric

Dans Swift 4

func scrollViewDidScroll(_ scrollView: UIScrollView) {
  let isReachingEnd = scrollView.contentOffset.y >= 0
      && scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)
}

Si vous implémentez UITableView/UICollectionView extensible, vous devrez peut-être cocher scrollView.contentSize.height >= scrollView.frame.size.height

1
onmyway133