Comment obtenir un UITableview pour aller vers le haut de la page sur la recharger?
Je suis en train d'essayer d'obtenir un UITableview pour aller vers le haut de la page lorsque je recharge les données de la table quand je l'appelle la suite de
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
//A bunch of code …
[TableView reloadData];
}
Le long de ces mêmes lignes, je tiens également à être en mesure d'aller à une section spécifique lorsque je recharge les données de la table.
J'ai essayé de placer la suivante, ce qui semble s'appliquer uniquement à la ligne, avant et après la recharge, mais rien ne se passe:
[TableView scrollToRowAtIndexPath:0 atScrollPosition:UITableViewScrollPositionTop animated:YES];
Vous devez vous connecter pour publier un commentaire.
Voici une autre façon vous pourriez le faire:
Objective-C
Swift 3
Probablement la plus facile et la plus simple façon de le faire.
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: { tableView.setContentOffset(.zero, animated: false) })
Après la lecture de toutes les réponses ici et d'ailleurs, j'ai enfin trouvé une solution qui fonctionne de manière fiable et ne montre pas le défilement après le chargement des données. Ma réponse est basée sur cette post et de mon observation que vous avez besoin d'un décalage négatif si vous utilisez du contenu des encarts:
tableView.estimatedRowHeight
à la hauteur de mon top séparateur a fait le travail pour moi.tableView.layoutIfNeeded()
m'a aidé après 1-2 heures de galère!tableView.scrollToRow(at: IndexPath.init(row: 0, section: 0), at: .top, animated: true)
- avec la fonction de vérification de la ligne et de l'article count > 0.Pour faire défiler jusqu'à une section spécifique, vous devez spécifier le chemin d'index pour elle:
Si vous avez un doute sur le nombre de lignes dans votre tableView. Utiliser les éléments suivants:
C'est de travailler pour moi.
SANS ANIMATION
Je suis sur iOS11, en utilisant un simple tableview style avec les en-têtes et en quelque sorte la seule façon que j'ai eu ce pour fonctionner correctement pour avoir la tableview vraiment sur le dessus après un rechargement sans aucune étrange scintille/animation des comportements a été à l'utilisation de ces méthodes dans cet ordre là où TOUS ces éléments sont nécessaires:
Je suis grave que tous ces éléments sont nécessaires, même s'il semble que la première ligne n'est pas pertinent du tout. Ah oui, aussi très important, ne PAS utiliser ce:
On pourrait penser que c'est le même que le "setContentOffset d'animation:FALSE," mais apparemment il n'est pas! Apple traite cette méthode de manière différente et dans mon cas cela n'a travaillé que lors de l'utilisation de la méthode complète avec animation:FAUX.
AVEC ANIMATION
J'ai aussi voulu essayer avec une belle animation avec défilement vers le haut. Il y a le contenu de décalage semble que les méthodes de toujours provoquer une étrange animation des comportements. La seule façon que j'ai obtenu ce travail avec une belle animation après quelques essais et erreurs ont été ces méthodes dans l'ordre exact:
Avertissement, assurez-vous d'avoir au moins 1 ligne avant l'exécution de la dernière ligne de code pour éviter le plantage 🙂
J'espère que cela aide quelqu'un un jour!
UITableView est une sous-classe de UIScrollView, de sorte que vous pouvez également utiliser:
Dans swift 3.1
Vous devez faire défiler l'écran UITableView à la première ligne de votre tableau de vue à l'aide de cette ligne de code:
Si vous faites défiler avant de le recharger et le nombre de lignes diminue, vous pouvez avoir une étrange animation de comportement. Pour assurer le défilement qui se passe après la recharger, utiliser une méthode comme ceci:
J'ai été un peu confus par certaines des réponses que j'ai trouvé à cette question en raison des explications incomplètes. De ce que j'ai recueillies, il y a deux routes pour accomplir ce que l'OP a demandé et ils sont comme suit:
1) Si l'animation n'est pas une exigence, je vous suggère de mettre à zéro la position de défilement avant de chargements de données en utilisant l'une des méthodes de déductions. La raison pour laquelle vous devez exécuter décalage avant reloadData est que reloadData s'exécute de façon asynchrone. Si vous exécutez décalage après rechargement, votre position de défilement sera probablement un peu de lignes de haut en bas.
2) Si l'animation est une exigence, la position de votre faites défiler jusqu'à la ligne du haut, après l'exécution de reloadData à l'aide de scrollToRow. La raison scrollToRow travaille ici, c'est qu'il vous positionne dans le haut de la table, par rapport à la méthode de la compensation que vous positionne par rapport à des données déjà chargées.
Pour ceux qui sont encore à trouver de solution à cela, vous pouvez utiliser l'extension suivante de
UITableView
.Y compris une case où la première section de ligne(s) ou non. Il va jusqu'à la section de ligne(s) et puis passe à une autre.
Espère que vous avez aidé.
Après avoir examiné les options décrites ci-dessus ma version de la solutions est la suivante. Il fonctionne toujours en iOS 11 & 12 pour les deux UICollectionView & UITableView.
UICollectionView:
UITableView: