我有一個使用AutoLayout佈局的UITableViewCell
子類,我想要一個小圖片,其中圖片視圖會轉換,增長一點,然後縮小。暫時刪除NSLayoutConstraint?
目前,由於約束條件,圖像右側的標籤也在移動(因爲它們應該是這樣)。
我想要一個快速簡便的方法來臨時說「在動畫運行時將這些標籤保留在當前位置」。這是我可以做的事情,而不需要刪除和重新添加這些限制,這是很多麻煩?
我有一個使用AutoLayout佈局的UITableViewCell
子類,我想要一個小圖片,其中圖片視圖會轉換,增長一點,然後縮小。暫時刪除NSLayoutConstraint?
目前,由於約束條件,圖像右側的標籤也在移動(因爲它們應該是這樣)。
我想要一個快速簡便的方法來臨時說「在動畫運行時將這些標籤保留在當前位置」。這是我可以做的事情,而不需要刪除和重新添加這些限制,這是很多麻煩?
沒有API說「在這裏留下這些視圖」,暫時禁用自動佈局的某些部分。有幾種可能的解決方案:
[super layoutSubviews]
運行後(或刪除改變你的形象來看,運行自動佈局,然後把它放回去)frameForAlignmentRect:
和alignmentRectForFrame:
獲取自動佈局以使用未轉換的幀進行對齊。更多細節和建議是在這裏的答案,這是如何使轉換和自動佈局一起玩一個類似的問題:How do I adjust the anchor point of a CALayer, when Auto Layout is being used?
在iOS的8起NSLayoutConstraints
現在有一個active
屬性,你可以更改myConstraint.active = NO;
。這消除了約束,而這個值設置爲YES
將[重新]添加:
激活或關閉約束調用addConstraint:和 removeConstraint:正在管理的 項目的最近的共同祖先的觀點通過這個約束。使用此屬性而不是 直接調用addConstraint:或removeConstraint:。 source
此外,還有一些採取約束(NSArray<NSLayoutConstraint>
)的陣列中的兩個新的類方法activateConstraints:
和deactivateConstraints:
,以便能有所幫助,特別是如果你有約束條件的IBOutletCollection
。
[NSLayoutConstraint deactivateConstraints:myConstraints];
這是一個偉大的答案,但幸好我並不需要它。我使用了'CABasicAnimation'來代替UIView動畫,因爲它們不會觸發佈局更改。 – Luke
@lukech這是一種選擇,但要小心,因爲如果在動畫過程中其他任何事情都會導致佈局,那麼您將回到剛開始使用的相同錯誤。 –