2017-03-14 7 views
3

Unsere UITableView existiert auf einem ViewController (und kein TableViewController). Wir füllen es zur Laufzeit mit zwei Zeilen. Wenn wir eine Höhenbeschränkung setzen, erscheint die Tabelle in Ordnung. Wenn wir nicht setzen die Höhenbeschränkung die Tabelle vollständig erscheint nicht. Wie können Sie festlegen, dass UITableView die Höhe dynamisch festlegt?iOS: Dynamisch setzen UITableView Höhe in Swift

Ich habe Threads über die dynamische Einstellung der Zeilenhöhe (die funktioniert gut) aber nicht über die tatsächliche Tischhöhe gesehen. Es gibt ein paar Threads zu diesem spezifischen Punkt, aber keiner scheint für mich zu funktionieren.


Update zur Lösung: Als Roboter Katze vorgeschlagen, dass wir eine Höhe Einschränkung für die UITableView im Storyboard eingerichtet (wir hatten das schon) und ziehen Sie dann tat Ctrl eine IBOutlet in unserem Controller zu erstellen. Von dort führten wir den folgenden Code in viewWillAppear pro Vignesh Antwort:

tableViewHeightConstraint.constant = tableView.contentSize.height 

Hinweis, bevor Sie den obigen Code ausführen wir reloadData() in der gleichen Methode fordern unsere Tabelle zu füllen.

+1

Constraints sind nur ein weiteres Objekt, das Sie über ein 'IBOutlet' referenzieren können. Setzen Sie Ihre View-Controller-Constraints im Storyboard und erstellen Sie dann einen Ausgang für die Höhenbeschränkung 'UITableView' in Ihrer Unterklasse 'UIViewController' (oder die Constraint, die die Höhe des' UITableView' wie die Entfernung zum unteren Bildschirmrand steuert). Stellen Sie dann den entsprechenden Wert für die Höhe ein (wie einen festen Wert oder einen Teil des Bildschirms). –

Antwort

5

Wir haben keine automatische Dimension für UITableView, sie wirken sich nur auf die Höhe von UITableViewCell aus. Wenn Sie die Tabellenansichtshöhe dynamisch festlegen möchten, ist es wahrscheinlich der beste Weg, die Tabellenansichtshöhenbeschränkung gleich der Inhaltsgröße zu setzen, nachdem die Tabellenansicht geladen wurde. Ich meine etwas wie,

tableViewHeightConstraint.constant = tableView.contentSize.height 
+0

Beachten Sie, dass dies in Ordnung ist, wenn contentSize.height kleiner als die Ansichtshöhe ist. Wenn Sie wissen, dass Sie immer nur zwei Zellen haben werden und sie immer die gleiche Höhe haben, wird TableView möglicherweise nicht benötigt, Sie können eine einfache UIView haben. – silentBob

+1

@silentBob. Ich stimme zu Danke, aber ich dachte, es ist offensichtlich, und Marcus hätte die Frage nicht gestellt, ob die Tabellenansichtsgröße jemals die Ansichtshöhe überschreiten würde. Zur Vervollständigung könnte dies leicht durch Umbrechen in einer MIN (contentSize, viewSize) behoben werden. – Vignesh

+0

Danke. In der Zukunft könnten wir drei oder vier Zeilen haben usw. Ich werde die min-Funktion verwenden, wenn wir das tun. Wir gingen mit einer Tabellenansicht und nicht mit einer einfachen UIView, da jede Zelle das exakt gleiche Layout haben sollte. Ich wusste nicht, wie man das Layout in verschiedene Zeilen ohne Tabelle klont (wenn das Sinn macht ...). –

1

Sie können auf vielfältige Weise Tableview Rahmen ändern, mit Animationen etc.

tableView.frame = CGRect(x: leftTableBorder, y: topTableBorder, width: tableWidth, height: tableHeight) 

Oder Sie können Tableview bezogenen Einschränkungen ändern und aktualisieren Sie dann Einschränkungen mit layoutIfNeeded, auch wenn Sie animiert werden soll.

Wenn Sie zum Beispiel eine Höhe Einschränkung Eigenschaft hat:

tableViewHeightConstraint.constant = desiredHeight 

layoutIfNeeded() 

In jedem Fall sind Einschränkungen erforderlich, so automatisches Layout weiß, wie die Tabelle zu machen.

Verwandte Themen