2016-04-13 4 views
0

gegeben, dass keine der Antworten hier iOS UITableView Scroll to bottom of section Arbeit richtig bei rowHeight funktioniert, wenn Höhe von Tableview Reihen variiert Ich habe bekam wieder zu fragen: Wie ich scrollen zuverlässig auf den Grund der Tabelle? Bedeutung: der Boden des Tabelleninhaltes wird mit der Unterseite der Tabellenansicht ausgekleidetUITableView scrolltobottom, die == UITableViewAutomaticDimension

diese

extension UITableView 
{ 
func scrollToBottom(animated: Bool = true) 
{ 
    layoutSubviews() // if rowHeight UITableViewAutomaticDimension you have to force layout to get semi-correct content size height 
    let csh = contentSize.height 
    let fsh = bounds.size.height 
    if csh > fsh { 
     let offset = csh - fsh 
     setContentOffset(CGPointMake(0, offset), animated: animated) 
    } 
} 
} 

fast funktioniert, aber underscrolls noch von etwa 150 bis 200 px sowohl auf 9.3.1 und 8.4.1

let offset = csh

und es overscrolls zeigt auf glücklich Spitze der Inhalt durch bei underscrolled lassen offset = csh - fsh vom wast Leerzeichen gefolgt gefüllt mit Void

gegeben, dass „springt vertikal“ für die tableview in dem Storyboard überprüft es richtig im letzteren Fall springt eine geringste Provokation eines Benutzers Note gegeben ;-)

das ist unioslike komplex und sehr androidlike

sollte das einfach gewesen sein, oder? Recht?

+0

Was passiert, wenn Sie scrollToRowAtIndexPath aufrufen und Ihre dataSource nach dem letzten Index fragen? – Dare

Antwort

0

scrollToRowAtIndexPath funktioniert mit Zelle mit dynamischer Höhe. Hier ein Beispiel:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.rowHeight = UITableViewAutomaticDimension 
     tableView.estimatedRowHeight = 100 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 20 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = UITableViewCell() 
     cell.textLabel?.numberOfLines = 0 
     cell.textLabel?.lineBreakMode = .ByWordWrapping 
     cell.textLabel?.text = [String](count: indexPath.row, repeatedValue: "Hello").joinWithSeparator(" ") 
     return cell 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let lastRow = tableView.numberOfRowsInSection(0) 

     tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: lastRow - 1, inSection: 0), atScrollPosition: .Bottom, animated: true) 
    } 
} 
+0

nicht ganz, es funktionierte am 9.3.1, konnte aber am 8.4.1 nicht komplett runterscrollen –

Verwandte Themen