2017-01-23 113 views
1

我有一個具有UITableView子視圖的UIView。動畫調整具有子視圖的UIView的大小

UIView的是菜單,即最初具有的器件寬度的50%的寬度,並且具有的UITableView自動版式約束UIView的。

在菜單中選擇一個項目會觸發UIView調整到設備寬度的33%。正如我所料,UITableView在沒有動畫的情況下改變大小,然後UIView通過動畫追上它。

有沒有簡單的方法來使用我的UIView動畫我的UITableView,同時保持AutoLayout約束?

我試過以下,同樣的動畫塊作爲UIView的內部:

let tableWidth = self.mm.menuOneController.tableView.bounds.size.width 
let newTableWidth = (tableWidth * 2)/3 
self.mm.menuOneController.tableView.bounds.size.width = newTableWidth 

這個作品中,UITableView的是與UIView的動畫一起調整,但是自動版式完全不是那麼回事作爲我期望。

了UIView的X值是0.0,所以它釘在上海華的左側,當它調整大小時,它是從它的右手大小。但是,UITableView似乎在左右兩邊調整大小,直到它達到正確的寬度(我希望這是有道理的)。

有什麼建議嗎?

在此先感謝!

+3

只要約束不是在每個國家明確的,並且你已經調整最終的動畫狀態的制約,一個簡單的'layoutIfNeeded()'(他們共同上海華盈)內'UIView.animate ...'會做招。 – Alladinian

+0

非常感謝! – nickjf89

回答

3

失去你從動畫塊你的問題中列出的三條線,並在塊的末尾添加一個調用layoutIfNeeded()在這種情況正在改變大小的視圖。 (即<yourMenuView>.layoutIfNeeded()

這會導致在每個動畫幀中重新應用約束,以根據需要調整所有子視圖的佈局以符合約束條件。

+0

完美,非常感謝! – nickjf89

+0

這確實奏效,但它現在似乎只在第二次提問時才工作。所以,我第一次添加子視圖,而layoutIfNeeded肯定是在做一些事情,它不會像第一次那樣做,在這一點上它正在做預期的事情。有什麼建議麼? – nickjf89

+0

另外,你說失去了三條線?但是,這些線路決定了我的觀點最終會變成什麼樣子,而且還有生命力。所以我不能失去他們? – nickjf89

相關問題