2014-07-07 19 views
5

我有一個使用AutoLayout佈局的UITableViewCell子類,我想要一個小圖片,其中圖片視圖會轉換,增長一點,然後縮小。暫時刪除NSLayoutConstraint?

目前,由於約束條件,圖像右側的標籤也在移動(因爲它們應該是這樣)。

我想要一個快速簡便的方法來臨時說「在動畫運行時將這些標籤保留在當前位置」。這是我可以做的事情,而不需要刪除和重新添加這些限制,這是很多麻煩?

回答

1

沒有API說「在這裏留下這些視圖」,暫時禁用自動佈局的某些部分。有幾種可能的解決方案:

  • 動畫
  • 中刪除您的約束安排你的約束不同(使它們在圖像視圖的上海華盈,例如,或者讓他們只能依靠攝像畫面的中心)
  • 容器視圖的重寫layoutSubviews堅持你的標籤,回到原來的地方希望他們自動佈局在[super layoutSubviews]運行後(或刪除改變你的形象來看,運行自動佈局,然後把它放回去)
  • 子圖像視圖覆蓋frameForAlignmentRect:alignmentRectForFrame:獲取自動佈局以使用未轉換的幀進行對齊。

更多細節和建議是在這裏的答案,這是如何使轉換和自動佈局一起玩一個類似的問題:How do I adjust the anchor point of a CALayer, when Auto Layout is being used?

+0

這是一個偉大的答案,但幸好我並不需要它。我使用了'CABasicAnimation'來代替UIView動畫,因爲它們不會觸發佈局更改。 – Luke

+1

@lukech這是一種選擇,但要小心,因爲如果在動畫過程中其他任何事情都會導致佈局,那麼您將回到剛開始使用的相同錯誤。 –

5

在iOS的8起NSLayoutConstraints現在有一個active屬性,你可以更改myConstraint.active = NO;。這消除了約束,而這個值設置爲YES將[重新]添加:

激活或關閉約束調用addConstraint:和 removeConstraint:正在管理的 項目的最近的共同祖先的觀點通過這個約束。使用此屬性而不是 直接調用addConstraint:或removeConstraint:。 source

此外,還有一些採取約束(NSArray<NSLayoutConstraint>)的陣列中的兩個新的類方法activateConstraints:deactivateConstraints:,以便能有所幫助,特別是如果你有約束條件的IBOutletCollection

[NSLayoutConstraint deactivateConstraints:myConstraints];