Dans ma vue tableau, je dois faire défiler vers le haut. Mais je ne peux pas garantir que le premier objet sera la section 0, ligne 0. Peut-être que ma vue de table commencera à partir de la section numéro 5.
Je reçois donc une exception lorsque j'appelle:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
Existe-t-il une autre façon de faire défiler vers le haut de la vue tableau?
ios
uitableview
Ilya Suzdalnitski
la source
la source
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: true)
semble fonctionner dans iOS 11Remarque : cette réponse n'est pas valide pour iOS 11 et versions ultérieures.
je préfère
Si vous avez un encart supérieur sur votre vue de table, vous devez le soustraire:
la source
tableView
a une valeur non nullecontentInset
par le haut. Par exemple:tableView.contentInset = UIEdgeInsetsMake(5.0f, 0.0f, 250.0f, 0.0f);
. Si tel est le cas, dans votre code,tableView
défile jusqu'à(0.0f, 5.0f)
.[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];
-scrollView.adjustedContentInset.top
plutôt.Actions possibles:
1
2
3
4
5
Désactiver le défilement vers le haut:
Modifiez-le et utilisez-le selon les exigences.
Swift 4
la source
Il vaut mieux ne pas utiliser NSIndexPath (table vide), ni supposer que le point haut est CGPointZero (encarts de contenu), c'est ce que j'utilise -
J'espère que cela t'aides.
la source
Swift 4 :
Cela fonctionne très bien:
la source
UITableViewStyleGrouped
(les en-têtes défilent avec le contenu) et ce code fonctionne. Assurez-vous que vous êtes dans le thread principal et que vous lancez ce code après que la vue s'affiche (viewDidAppear
). Si vous avez toujours des problèmes, essayez de mettre le code à l'intérieur de ceci:DispatchQueue.main.asyncAfter(deadline: .now()+0.1, execute: { // the code }
J'ai rencontré un problème appelant à essayer certaines des méthodes sur un espace vide
tableView
. Voici une autre option pour Swift 4 qui gère les vues de table vides.Usage:
la source
NE PAS UTILISER
Il peut parfois mal régler le décalage. Par exemple, dans mon cas, la cellule était en fait légèrement au-dessus de la vue avec des encarts de zone de sécurité. Pas bon.
UTILISATION AU LIEU
la source
Sur iOS 11, utilisez
adjustedContentInset
pour faire défiler correctement vers le haut dans les deux cas lorsque la barre d'état en cours d'appel est visible ou non.Rapide:
la source
Pour les tables qui ont un
contentInset
, définir le décalage de contenu surCGPointZero
ne fonctionnera pas. Il défilera vers le haut du contenu contre le défilement vers le haut de la table.La prise en compte du contenu inséré produit ceci à la place:
la source
Ce code vous permet de faire défiler une section spécifique vers le haut
la source
Rapide:
la source
Swift 3
si
tableView.setContentOffset
ça ne marche pas.Utilisation:
la source
Puisque mon
tableView
est plein de toutes sortes d'encarts, c'était la seule chose qui fonctionnait bien:Swift 3
Swift 2
la source
En plus de ce qui a déjà été dit, vous pouvez créer une extension (Swift) ou une catégorie (Objectif C) pour faciliter cela à l'avenir:
Rapide:
Chaque fois que vous souhaitez faire défiler une table donnée vers le haut, vous pouvez appeler le code suivant:
la source
Je préfère ce qui suit, car il prend en compte un encart. S'il n'y a pas d'encart, il défilera toujours vers le haut car l'encart sera 0.
la source
Rapide :
si vous n'avez pas d'en-tête tableView:
si c'est le cas :
la source
Swift 5, iOS 13
Je sais que cette question a déjà beaucoup de réponses mais d'après mon expérience, il n'y a qu'une seule méthode qui fonctionne toujours:
tableView.scrollToRow(at: IndexPath(row: someArray.count - 1, section: 0), at: .bottom, animated: true)
Si vous travaillez en asynchrone, des tableaux qui s'animent avec des claviers, etc., les autres réponses défilent souvent vers le bas presque pas vers le bas absolu. Cette méthode vous mènera à la fin absolue d'une table à chaque fois.
la source
Voici ce que j'utilise pour fonctionner correctement sur iOS 11:
la source
Dans Swift 5, merci beaucoup @ la réponse d'Adrian
Usage:
la source
utiliser contentOffset n'est pas la bonne façon. ce serait mieux car c'est la façon naturelle de voir la table
la source
C'était le seul extrait de code qui fonctionnait pour moi
Swift 4:
PS 70 est la hauteur de ma cellule d'en-tête et de vue de table
la source
appelez cette fonction où vous voulez UITableView faites défiler vers le haut
la source
Swift 4 via l'extension, gère la vue de table vide:
la source
J'utilise tabBarController et j'ai quelques sections dans ma table à chaque onglet, c'est donc la meilleure solution pour moi.
la source
J'ai dû ajouter la multiplication par
-1 *
à la somme de la barre d'état et de la barre de navigation, parce que cette hauteur disparaissait de l'écran,la source
en rapide
votre ligne = selectioncellRowNumber votre section si vous avez = selectionNumber si vous n'avez pas défini est à zéro
//UITableViewScrollPosition.Middle ou Bottom or Top
la source
Voici le code pour faire défilerTableView To Top par programme
Rapide:
la source
Dans Swift-3:
la source
Si vous souhaitez déplacer l'animation de défilement dans le tableau, utilisez ce code. Le défilement se déplace vers le haut avec une animation en 0,5 seconde.
la source
Avec Swift:
la source