2015-12-31 61 views
0

我有一個表格視圖,我嘗試通過更改自動佈局約束以及單元格的高度來改變方向發生後單元格的佈局。在Swift中,如何在方向發生時更改表格單元佈局?

我更新了函數中的新約束,比如在一個單元類中說setMyConstraints()。如果方向發生,我嘗試在layoutSubViews()的單元格內呼叫setMyConstraints()

但是,這不是正確的地方,因爲多個layoutSubViews()被調用,其中一些仍然使用舊的高度,直到最後一個。下面是一些日誌我跟蹤一個方向發生之後:

cell layoutSubviews called, frame.height = 69 
tableview heightForRowAtIndexPath called, return height = 170 
cell layoutSubviews called, frame.height = 69 
cell layoutSubviews called, frame.height = 170 

是什麼讓糟糕的是,如果我不第一layoutSubViews之前清理所有的約束,衝突可能已經發生。

因此,這裏需要的過程:

  1. 設備的方向發生

  2. 清理的細胞

  3. 細胞視圖旋轉,並得到裏面的視圖的所有限制更新的高度

  4. 爲單元格內的視圖添加更新的約束條件

我找不到合適的地方做(2)和(4)。我嘗試了幾個想法,但都失敗了,有些非常接近,但我仍然無法找到合理/完美的地方。

換句話說,當方向發生時如何更改單元佈局(包括約束更改和單元高度更改)?

+0

你可以在你提到的方法中顯示你的代碼 - 'heightForRowAtIndexPath','layoutSubviews'和'setMyConstraints'嗎?你在改變什麼限制? –

回答

0

UIView有一個updateConstraints()函數,您可以覆蓋。這是設置約束更改代碼的好地方。

該方法可能會在輪換後自動調用。但是,如果沒有,您可以在旋轉開始後或者在完成後立即發送消息setNeedsUpdateConstraints()

+0

並不那麼簡單。我更新了我的問題。我嘗試了你的想法,但我失敗了。如果你知道如何去做,請提供更詳細的答案。謝謝。 –

相關問題