2016-07-14 2 views
4

Ich muss nach unten scrollen. Ich habe eine Chat-App wie WhatsApp. Wenn also die Ansicht erscheint, sollte die Tabellenansicht die letzte Zeile anzeigen. Ich nehme das mit folgender Zeile und arbeite nett.Scrollen unten in der Tabellenansicht und Leistung

tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: false) 

Auch ich muss nach unten scrollen, wenn die Tastatur erscheint. Ich verwende Auto-Layout und die obige Zeile funktioniert nicht. Um dies zu tun, verwende ich folgende Zeile:

func scrollToLastRow(animated: Bool) { 
    if self.numberOfRowsInSection(0) > 0 { 
     self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated) 
    } 
} 

Dies ist eine Erweiterung für Tableview.

Diese Lösung funktioniert einwandfrei, wenn nicht zu viele Nachrichten vorhanden sind. Dann versuchte ich mit 5000 Nachrichten (so Tableview haben 5000 Zeilen, aber ich blättere sie) Und wenn Tastatur erscheint, sehe ich CPU-Auslastung ist% 98-100. Ich denke, der zweite Code ist ein Problem für die Paginierung, es verursacht das Laden jeder Nachricht zu rammen und meine App friert ein und empfängt Ram-Warnung.

Wie scrollt man nach unten ohne Leistungsproblem?

+0

Haben Sie hierfür eine Lösung gefunden? Auch mit Realm. – oyalhi

Antwort

0

Wenn Sie eine Seitennummerierung haben, können Sie versuchen, nur Ihre aktuelle Seite sowie die letzte Seite zu laden, vorausgesetzt, Sie haben 20 Nachrichten auf jeder Seite. In diesem Fall hat Ihre Tabelle nur 40 Zeilen. Dann können Sie Ihre Funktion:

func scrollToLastRow(animated: Bool) { 
if self.numberOfRowsInSection(0) > 0 { 
    self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated) 
} 

}

+0

Ich benutze Realm und es hat ein automatisches Paginierungssystem. Also kann ich das nicht tun. –

0

versuchen, diese Methode:

let delay = 0.1 * Double(NSEC_PER_SEC) 
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 

    dispatch_after(time, dispatch_get_main_queue(), { 

      let numberOfSections = self.tableView.numberOfSections 
      let numberOfRows = self.tableView.numberOfRowsInSection(numberOfSections-1) 
      if numberOfRows > 0 { 
       let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1)) 
       self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true) 
      } 
    }) 
+0

Nein, es ist dasselbe. –

Verwandte Themen