2016-07-04 13 views
0

Ich habe versucht, eine UITableView, die in einem UIViewController ist, zu erweitern/zu reduzieren. Ich lege die UITableView Höhe Beschränkung auf Null gesetzt und die AnimationCollapse Expand UITableView

func collapseExpandRoomSection() { 
    isRoomCollapsed = !isRoomCollapsed 
    tableHeightConstraint.constant = isRoomCollapsed ? 0.0 : totalTableHeight  
    UIView.animateWithDuration(0.3) { 
     self.view.layoutIfNeeded() 
    } 
} 

Der Zusammenbruch Effekt funktioniert gut machen, aber wenn ich alle Zellen die Tabelle zu erweitern versucht gegangen. Ich glaube,

Dank

+0

einfügen Code für hier zu erweitern .. –

+0

Ich würde vermuten, dass Ihre 'totalTableHeight' nicht richtig eingestellt ist. Haben Sie in Ihrer 'collapseExpandRoomSection()' Methode überprüft, dass es> 0 ist? Versuchen Sie, "totalTableHeight" vorübergehend durch einen konstanten Wert wie 50.0 zu ersetzen und sehen Sie, ob das funktioniert. – Mischa

Antwort

0

Sehen Sie wie Sie die constraint aktualisiert haben, sollten Sie es in dieser Reihenfolge tun:

self.view.setNeedsUpdateConstraints() 
self.view.setNeedsLayout() 
self.view.layoutIfNeeded() 

Wie Sie die Einschränkung aktualisiert haben, damit Sie zunächst das Set-Update aktualisieren sollte Einschränkungen und setzen Bedürfnisse Layout. Gefolgt von der layoutIfNeeded(), um die Änderung sofort anwenden zu lassen.

Wie kurz in den Kommentaren besprochen, ist der Code nur anwendbar, wenn Sie die updateConstraint überschreiben. Ist nicht korrekt bei der Beantwortung der obigen Frage.

+0

Das ist falsch. Immer wenn Sie Einschränkungen in einer Ansicht hinzufügen, entfernen oder ändern, wird das Layout automatisch ungültig ('setNeedsLayout()') und im nächsten Layout-Zyklus werden die Frames automatisch neu berechnet. Darüber hinaus müssen Sie 'setNeedsUpdateConstraints()' in 95% der Fälle nicht aufrufen. Es muss nur aufgerufen werden, wenn Sie 'updateConstraints()' in Ihrer Implementierung überschrieben haben und Sie dort tatsächlich Abhängigkeiten basierend auf einigen Statusvariablen Ihrer Sicht ändern. – Mischa

+0

Ich sehe, danke für die Info. Ich habe missverstanden, was die Dokumentation sagt, glaube ich. Löscht die Antwort nicht, sondern bearbeitet sie, um zu sagen, dass sie falsch ist. –

+0

Sie sind nicht die erste Person, die die Dokumente bei diesen Layout-Methoden missversteht ...;) – Mischa