2016-07-04 91 views
0

我試圖展開/摺疊在UIViewController內的UITableView。我把UITableView高度約束到零,使動畫收起展開UITableView

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

崩潰影響工作正常,但是當我試圖擴大表中的所有細胞都不見了。

感謝

+0

粘貼代碼展開在這裏.. –

+0

我猜你的'totalTableHeight'沒有正確設置。你有沒有在你的'collapseExpandRoomSection()'方法中檢查它是否爲0?試着用像50.0這樣的常量值臨時替換'totalTableHeight',看看是否有效。 – Mischa

回答

0

看起來像你已經更新了constraint,你應該在這個順序做,我相信:

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

當你更新了約束,因此,你應該首先更新集更新約束和設置需求佈局。隨後layoutIfNeeded()立即進行更改。

正如在評論中簡要討論的那樣,代碼僅適用於覆蓋updateConstraint的情況。回答上述問題不正確。

+0

這是不正確的。無論何時添加,刪除或修改視圖上的約束,佈局自動失效('setNeedsLayout()'),在下一個佈局週期中,幀將自動重新計算。此外,你不需要在95%的情況下調用'setNeedsUpdateConstraints()'。如果你在你的實現中重寫了'updateConstraints()',並且你實際上根據你的視圖的一些狀態變量修改了約束,那麼只需要調用它。 – Mischa

+0

我明白了,謝謝你的信息。我誤解了文件中說的我相信的東西。不會刪除答案,而是編輯它來說是錯誤的。 –

+0

你不是第一個誤解這些佈局方法的文檔的人......;) – Mischa