5 votes

setContentOffset ne fonctionne que si l'animation est définie sur YES

J'ai un UITableView que je voudrais voir s'afficher 100px plus bas. Pour une raison quelconque, cela ne fonctionne que lorsque l'option "animated" est définie sur YES. Comment cela se fait-il ?

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    /*[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] 
                          atScrollPosition:UITableViewScrollPositionNone 
                                  animated:NO];*/

    /*[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathWithIndex:1] 
                                        atScrollPosition:UITableViewScrollPositionNone 
                                        animated:NO];*/

    [self.tableView setContentOffset:CGPointMake(0,100) animated:YES];
}

0voto

David Liu Points 2930

En utilisant l'application de base basée sur la navigation fournie par XCode et en lui donnant quelques cellules de tableau, cela fonctionne bien avec ce que vous avez donné. Avez-vous essayé de définir le décalage du contenu dans viewDidAppear plutôt que dans viewWillAppear ?

0voto

Andrei Points 2226

Que se passe-t-il si vous essayez d'utiliser setFrame au lieu de setContentOffset ?

Vous devez ajouter ce code dans votre méthode viewDidAppear :

[self.tableView setFrame:CGRectMake(0, 100, 320, 380)];

Selon les autres éléments que vous avez dans votre vue (par exemple, le contrôleur de navigation, la barre d'outils, etc.), vous devrez ajuster le 380 à autre chose.

0voto

makaron Points 1148

J'ai vu que vous avez soulevé une question similaire, mais avec une préhistoire un peu différente, ici.

J'y ai répondu. Ça pourrait être utile à quelqu'un.

-1voto

hkdalex Points 311

Déplacez le "setContentOffset" vers "viewDidLoad" et ajoutez "reloadData" avant cela :

Dans Swift :

func viewDidLoad() {
    super.viewDidLoad()
    tableView.reloadData() // important for scrolling to be possible
    tableView.setContentOffset(newContentOffset), animated: false)
    }

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