Comment faire défiler vers le haut dans IOS7 UITableView?




(8)

Avec l'aide de quelques autres réponses, j'ai réussi à le faire fonctionner. Pour éviter un crash je dois d'abord vérifier qu'il y a quelques sections. NsNotFound peut être utilisé comme index de ligne si la première section n'a pas de ligne. Espérons que cela devrait être une fonction générique à placer dans un UITableViewController:

-(void) scrollToTop
{
    if ([self numberOfSectionsInTableView:self.tableView] > 0)
    {
        NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
        [self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }
}

Dans IOS6 j'ai le code suivant pour faire défiler vers le haut d'un UITableView

[tableView setContentOffset:CGPointZero animated:YES];

En IOS7, cela ne fonctionne plus. La vue de la table ne défile pas complètement vers le haut (mais presque).


Basé sur la réponse acceptée par @Markus Johansson, voici la version du code Swift:

func scrollToTop() {
    if (self.tableView.numberOfSections > 0 ) {
        let top = NSIndexPath(row: Foundation.NSNotFound, section: 0)
        self.tableView.scrollToRow(at: top as IndexPath, at: .top, animated: true);
    }
}

Essaye ça:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

Je réalise que cela a été répondu mais je voulais juste donner une autre option:

CGRect frame = {{0, 0},{1, 1}};
[self.tableView scrollRectToVisible:frame animated:YES];

Cela garantit toujours que UITableView défilera vers le haut. La réponse acceptée:

NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
[self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];

ne fonctionnait pas pour moi parce que je faisais défiler vers un tableHeaderView et pas une cellule.

L'utilisation de scrollRectToVisible fonctionne sur iOS 6 et 7.


Swift 4 UITableViewExtension:

func scrollToTop(animated: Bool) {
    if numberOfSections > 0 {
        let topIndexPath = IndexPath(row: NSNotFound, section: 0)
        scrollToRow(at: topIndexPath, at: .top, animated: animated)
    }
}

Voici la answer d'idStar dans la syntaxe Swift 3 mise à jour:

self.tableView.contentOffset = CGPoint(x: 0, y: 0 - self.tableView.contentInset.top)

Avec animation:

self.tableView.setContentOffset(CGPoint(x: 0, y: 0 - self.tableView.contentInset.top), animated: true)

vous pouvez toujours utiliser scrollToRowAtIndexPath: pour le but


float systemVersion= [[[UIDevice currentDevice] systemVersion] floatValue];

if(systemVersion >= 7.0f)
{
  self.edgesForExtendedLayout=UIRectEdgeNone;   
}

Essayez ce code dans la méthode viewDidLoad() .





ios7