ios - sortie - synchroniser calendrier iphone mac




UITableView-faites défiler vers le haut (20)

Avec Swift:

self.scripSearchView.quickListTbl?.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)

Dans ma vue de table je dois faire défiler vers le haut. Mais je ne peux pas garantir que le premier objet va être la section 0, ligne 0. Peut-être que ma vue de table commencera à partir de la section numéro 5.

Donc, je reçois une exception, quand j'appelle:

[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

Y a-t-il un autre moyen de faire défiler vers le haut de la vue de table?


Ce code vous permet de faire défiler une section spécifique vers le haut

CGRect cellRect = [tableinstance rectForSection:section];
CGPoint origin = [tableinstacne convertPoint:cellRect.origin 
                                    fromView:<tableistance>];
[tableinstance setContentOffset:CGPointMake(0, origin.y)];

Dans Swift-3:

self.tableView.setContentOffset(CGPoint.zero, animated: true)

En ajoutant à ce qui a déjà été dit, vous pouvez créer une extension (Swift) ou une catégorie (Objectif C) pour rendre cela plus facile à l'avenir:

Rapide:

extension UITableView {
    func scrollToTop(animated: Bool) {
        setContentOffset(CGPointZero, animated: animated)
    }
}

Chaque fois que vous voulez faire défiler une table donnée vers le haut, vous pouvez appeler le code suivant:

tableView.scrollToTop(animated: true)

J'ai rencontré un problème en appelant à essayer certaines méthodes sur un tableView vide. Voici une autre option pour Swift 4 qui gère les vues de table vides.

extension UITableView {
  func hasRowAtIndexPath(indexPath: IndexPath) -> Bool {
    return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section)
  }

  func scrollToTop() {
    let indexPath = IndexPath(row: 0, section: 0)
    if self.hasRowAtIndexPath(indexPath: indexPath) {
      self.scrollToRow(at: indexPath, at: .top, animated: true)
    }
  }
}

Usage:

// from yourViewController or yourTableViewController
tableView.scrollToTop()

Je devais ajouter la multiplier par -1 * à la somme de la barre d'état et de la barre de navigation, car elle dépassait cette hauteur de l'écran,

self.tableView.setContentOffset(CGPointMake(0 , -1 * 
  (self.navigationController!.navigationBar.height +  
  UIApplication.sharedApplication().statusBarFrame.height) ), animated:true)

L'utilisation de contentOffset n'est pas la bonne. ce serait mieux car c'est la façon naturelle de voir la table

tableView.scrollToRow(at: NSIndexPath.init(row: 0, section: 0) as IndexPath, at: .top, animated: true)

Pour avoir une fin lorsque vous avez terminé, ajoutez cette extension

// MARK: - UIScrollView

extension UIScrollView {

    /// Animate scroll to top with completion
    ///
    /// - Parameters:
    ///   - duration:   TimeInterval
    ///   - completion: Completion block
    func animateScrollToTop(withDuration duration:  TimeInterval,
                            completion:             @escaping (()->())) {

        UIView.animate(withDuration: duration, animations: { [weak self] in
                self?.setContentOffset(CGPoint.zero, animated: false)
            }, completion: { finish in
                guard finish else {
                    return
                }
                completion()
        })
    }
}

tableView.animateScrollToTop(withDuration: 0.25) { 
    // Finish
}

Rapide :

si vous n'avez pas d'en-tête tableView:

tableView.setContentOffset(CGPointMake(0,  UIApplication.sharedApplication().statusBarFrame.height ), animated: true)

si c'est le cas :

tableView.setContentOffset(CGPointMake(0, -tableViewheader.frame.height   + UIApplication.sharedApplication().statusBarFrame.height ), animated: true)

Rapide:

tableView.setContentOffset(CGPointZero, animated: true)

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 .5 secondes.

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[_tableContent scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

[UIView commitAnimations];

Sur iOS 11, utilisez adjustedContentInset pour faire correctement défiler vers le haut pour les deux cas lorsque la barre d'état d'appel est visible ou non.

if (@available(iOS 11.0, *)) {
    [tableView setContentOffset:CGPointMake(0, -tableView.adjustedContentInset.top) animated:YES];
} else {
    [tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:YES];
}

Rapide:

if #available(iOS 11.0, *) {
    tableView.setContentOffset(CGPoint(x: 0, y: -tableView.adjustedContentInset.top), animated: true)
} else {
    tableView.setContentOffset(CGPoint(x: 0, y: -tableView.contentInset.top), animated: true)
}

Swift 4

self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)

UITableView est une sous-classe de UIScrollView, vous pouvez donc également utiliser:

[mainTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

Ou

[mainTableView setContentOffset:CGPointZero animated:YES];

Et à Swift:

mainTableView.setContentOffset(CGPointZero, animated:true)

Et dans Swift 3 et ci-dessus:

mainTableView.setContentOffset(.zero, animated: true)

Voici ce que j'utilise pour travailler correctement sur iOS 11:

extension UIScrollView {
    func scrollToTop(animated: Bool) {
        var offset = contentOffset
        if #available(iOS 11, *) {
            offset.y = -adjustedContentInset.top
        } else {
            offset.y = -contentInset.top
        }
        setContentOffset(offset, animated: animated)
    }
}

Voici le code pour défilerTableView vers le haut par programme

Rapide:

self.TableView.setContentOffset(CGPointMake(0, 1), animated:true)

je préfère

[mainTableView setContentOffset:CGPointZero animated:YES];

Si vous avez un encart supérieur sur votre vue de table, vous devez le soustraire:

[mainTableView setContentOffset:CGPointMake(0.0f, -mainTableView.contentInset.top) animated:YES];

Actions possibles:

1

func scrollToFirstRow() {
    let indexPath = NSIndexPath(forRow: 0, inSection: 0)
    self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
}

2

func scrollToLastRow() {
    let indexPath = NSIndexPath(forRow: objects.count - 1, inSection: 0)
    self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: true)
}

3

func scrollToSelectedRow() {
    let selectedRows = self.tableView.indexPathsForSelectedRows
    if let selectedRow = selectedRows?[0] as? NSIndexPath {
        self.tableView.scrollToRowAtIndexPath(selectedRow, atScrollPosition: .Middle, animated: true)
    }
}

4

func scrollToHeader() {
    self.tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated: true)
}

5

func scrollToTop(){
    self.tableView.setContentOffset(CGPointMake(0,  UIApplication.sharedApplication().statusBarFrame.height ), animated: true)
}

Désactiver Faire défiler vers le haut:

func disableScrollsToTopPropertyOnAllSubviewsOf(view: UIView) {
    for subview in view.subviews {
        if let scrollView = subview as? UIScrollView {
            (scrollView as UIScrollView).scrollsToTop = false
        }
        self.disableScrollsToTopPropertyOnAllSubviewsOf(subview as UIView)
    }
}

Modifiez et utilisez-le selon vos besoins.

Swift 4

  func scrollToFirstRow() {
    let indexPath = IndexPath(row: 0, section: 0)
    self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
  }

Swift 4 via l'extension, gère la vue table vide:

extension UITableView {
    func scrollToTop(animated: Bool) {
        self.setContentOffset(CGPoint.zero, animated: animated);
    }
}

func scrollToTop() {
        NSIndexPath *topItem = [NSIndexPath indexPathForItem:0 inSection:0];
        [tableView scrollToRowAtIndexPath:topItem atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

appelez cette fonction où vous voulez UITableView faire défiler vers le haut





objective-c