147 votes

Comment faire défiler vers le bas d’un UITableView sur l’iPhone avant la vue apparaît

J'ai un UITableView qui est rempli avec des cellules d'une hauteur variable. Je voudrais la table pour faire défiler vers le bas lorsque la vue est poussé dans la vue.

J'ai actuellement la fonction suivante

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[log count]-1 inSection:0];
[self.table scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];

le journal est une mutable tableau contenant les objets qui composent le contenu de chaque cellule.

Le code ci-dessus fonctionne très bien, en viewDidAppear cependant, cela a l'effet pervers de l'affichage de la partie supérieure de la table lors de l'affichage apparaît d'abord et puis en sautant en bas. Je préfèrerais si l' table view pourrait être défile vers le bas avant qu'il n'apparaisse.

J'ai essayé de les faire défiler en viewWillAppear et viewDidLoad , mais dans les deux cas, les données n'ont pas été chargées dans la table, et à la fois de lever une exception.

De toute orientation serait bien apprécié, même si c'est juste une affaire de me dire ce que j'ai est tout ce qui est possible.

153voto

Jacob Relkin Points 90729

Je crois que l’appel `` va faire ce que vous voulez.

128voto

Chamira Fernando Points 1984

Je pense que le plus simple est

121voto

ofarouk Points 636

Réponse de Jacob, il s’agit de code :

42voto

Johannes Bauer Points 493

Si vous avez besoin pour atteindre la fin exacte du contenu, vous pouvez le faire comme ceci :

23voto

MattDiPasquale Points 23842

La solution retenue par @JacobRelkin n'a pas fonctionné pour moi dans iOS 7.0 à l'aide de Mise en page Automatique.

J'ai une sous-classe personnalisée d' UIViewController et ajout d'une variable d'instance, _tableView comme une sous-vue de ses view. J'ai placé _tableView l'aide Mise en page Automatique. J'ai essayé d'appeler cette méthode à la fin de l' viewDidLoad et même dans viewWillAppear:. Ni travaillé.

Donc, j'ai ajouté la méthode suivante pour mon sous-classe personnalisée d' UIViewController.

- (void)tableViewScrollToBottomAnimated:(BOOL)animated {
    NSInteger numberOfRows = [_tableView numberOfRowsInSection:0];
    if (numberOfRows) {
        [_tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:numberOfRows-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:animated];
    }
}

Appelant [self tableViewScrollToBottomAnimated:NO] à la fin de l' viewDidLoad travaux. Malheureusement, il provoque aussi l' tableView:heightForRowAtIndexPath: à être appelé trois fois pour chaque cellule.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X