2016-06-27 15 views
1

Ich baue ein Storyboard, wo ich eine Scroll-Ansicht habe, die eine Tabellenansicht enthält. Das erste, was ich getan habe, ist Scrollen in der Tabellenansicht zu deaktivieren, sonst werden wir zwei verschachtelte Bildlaufleisten bekommen, erk! Aber hier ist mein Problem, ich möchte die Tabellenansicht seine Höhe gleich der Summe seiner Zellen Höhe haben. (Zellenhöhe ist unterschiedlich, weil sie Kommentare anzeigen).UITableView nicht scrollbar aber genug Höhe

PS: Für die dynamische Zellen Höhe benutzte ich diese:

self.commentsTableView.estimatedRowHeight = 90.0 
self.commentsTableView.rowHeight = UITableViewAutomaticDimension 

Kurz: Ich habe eine Tabellenansicht wie eine Höhe Variablenliste verhalten soll.

Antwort

3

Es könnten auch andere Möglichkeiten, dies auch zu tun, aber in meinem Fall habe ich dies getan haben,

Also, was Sie tun müssen, ist, zunächst alle Zellen Last des Tableview lassen, so dass Sie alles Zelle Tableview überprüfen Tableview die Höhe sichtbaren alle Zelle zu erhöhen, ohne Tableview zu Scrollen wie unten geladen,

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

    //Update tableView Offset 
    if indexPath.row() == (tableView.indexPathsForVisibleRows.last! as! NSIndexPath).row { 
     //End of loading all Visible cells 
     self.updateTableViewOffsetForTableView(self.tableView, withHeightConstraint: self.heightConstraintTableView) 
     //If cell's are more than 10 or so that it could not fit on the tableView's visible area then you have to go for other way to check for last cell loaded 
    } 
} 

und dann danach müssen Sie die gewünschte Höhe für Ihre Tableview erhalten und diese Höhe auf die Höhe Einschränkung des Tableview gesetzt, aber Sie müssten ScrollView.

func updateTableViewOffsetForTableView(tableView: UITableView, withHeightConstraint heightConstraintToBeUpdated: NSLayoutConstraint) { 

    var heightRequiredForTable: CGFloat = tableView.contentSize.height 
    //Set some random height first, it is easy for tableView to shrink its height to high to low. 
    heightConstraintToBeUpdated.constant = 300 
    self.view!.layoutIfNeeded() 
    self.view!.setNeedsUpdateConstraints() 

    //Update the height constraint with height required for tableView 
    heightRequiredForTable = tableView.contentSize.height 
    heightConstraintToBeUpdated.constant = heightRequiredForTable 
    self.view!.layoutIfNeeded() 
    self.view!.setNeedsUpdateConstraints() 
} 

Das ist es, wenn Sie Ihre Scroll die Einschränkungen richtig gesetzt haben, dann wird es auf jeden Fall arbeiten, wie Sie erwarten ...

aktualisieren

ich eine Demo mit dynamischen Zellen erstellt haben sehen, die Ausgabe unten,

Scrollbare Tableview:

enter image description here

Scrollbare Scroll:

enter image description here

+0

Danke, aber ich nicht funktioniert, weil contentSize.height Anzahl von Zeilen zurückgibt * estimatedRowHeight, aber Höhe meiner Reihen der variabel sind. Ideen? – NathanVss

+0

Nein, contentSize gibt geschätzteRowHeight nicht zurück, es gibt die erforderliche Höhe für tableView zurück, um alle Zellen anzuzeigen. Ich habe eine Demo mit dynamischen Höhenzellen erstellt und es funktioniert wie erwartet. Siehe die aktualisierte Antwort. –