UITableview Scrol to Bottom Probleme

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UITableview Scrol to Bottom Probleme

    Hallo,
    ich will in meinem tableview automatisch zum Boden scrollen wenn dieser angezeigt wird. Also zur letzten Cell, wie bei WhatsApp oder Nachrichten(SMS) App. Die Cells sind dynamisch:

    Quellcode

    1. // tableview cell dimensions
    2. tableView.rowHeight = UITableViewAutomaticDimension
    3. tableView.estimatedRowHeight = 80

    Versucht habe ich es mit den beiden Möglichkeiten:

    Quellcode

    1. // möglichkeit 1
    2. let indexPath = NSIndexPath(forRow: messagesArray - 1, inSection: 0)
    3. self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
    4. let delay = 0.1 * Double(NSEC_PER_SEC)
    5. let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    6. dispatch_after(time, dispatch_get_main_queue(), {
    7. self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
    8. })
    9. // möglichkeit 2
    10. if self.tableView.contentSize.height > self.tableView.frame.size.height {
    11. let offset = CGPoint(x: 0, y: self.tableView.contentSize.height - self.tableView.frame.size.height)
    12. self.tableView.setContentOffset(offset, animated: false)
    13. }
    Alles anzeigen
    Beides funktioniert bedingt. Möglichkeit 1. ist schonmal komisch wie man sieht. Funktioniert nur mit doppeltem Aufruf von scrollToRowAtIndexPath und einem delay. Möglichkeit 2 funktioniert da besser, hat aber Probleme mit cells die größer als die vorgegebene höhe (estimatedRowHeight) von 80 sind.
    Das 2. Problem was bei beiden Auftritt, wenn ich zum Boden Scrolle nach dem Aufrufen des Tableviews und dann händisch nach oben scrolle (um nachrichten anzuschauen die weiter oben liegen) gibt es bei jeder cell einen kleinen Sprung nach unten ( ca. 5 Pixel) und dann gehts weiter. Also es "ruckelt" beim scrollen. Wenn ich dann bis oben einmal durch bin und das ganze wiederhole gibts keine Probleme mehr.
    Die Custom Cell besteht aus 2 Views, ein paar Labels und ein imageview. Aber selbst wenn ich den Inhalt lösche tritt der Fehler auf, sollte also nichts mit der Performance zutun haben.

    Hat hier jemand n bisschen Code der das macht was ich will (eigentlich wie bei jeder messenger app die letzte message anzeigen, welche sich unten befindet).
  • Das Problem könnte an der Berechnung der Höhe der einzelnen Zellen liegen, bzw. an der Tatsache dass der TableView nur die Höhe der sichtbaren Zellen abfragt und evtl. nicht aller darüber liegenden.

    Ich tippe einfach mal, dass dies bei Zellen mit gleicher Höher nicht auftritt. Kannst Du dies mal verifizieren?

    Baue mal eine Ausgabe in die Methode tableView:heightForRowAtIndexPath: mit Ausgabe der row ein. Dann schaue mal für welche Zeilen die Höhe abgefragt wird.