我建議創建一個BOOL和設置他們的UIView的-updateConstraints
(或-updateViewConstraints
,爲的UIViewController)。
-[UIView updateConstraints]
:(蘋果文檔)是建立約束自己應該重寫此方法做
自定義視圖。
兩個-updateConstraints
和-updateViewConstraints
可視圖的壽命期間被調用多次。 (例如,在視圖上調用setNeedsUpdateConstraints
會觸發這種情況)。因此,您需要確保阻止創建和激活重複約束 - 使用BOOL僅執行一次特定的約束設置,或者通過使確保在創建&激活新約束之前停用/移除現有約束。
例如:
- (void)updateConstraints { // for view controllers, use -updateViewConstraints
if (!_hasLoadedConstraints) {
_hasLoadedConstraints = YES;
// create your constraints
}
[super updateConstraints];
}
乾杯的評論@fresidue爲指出,蘋果的文檔建議您調用super
作爲最後一步。如果在更改某些約束之前調用super
,則可能會遇到運行時異常(崩潰)。
我已經與updateViewConstraints相同的經歷,所以我停止嘗試使用它。我在viewDidLoad中配置約束,或者在自定義視圖的updateConstraints方法中配置約束。希望有人會給你一個明確的答案。 – bilobatum
'updateViewConstraints':*您可以在子類中重寫此方法,以便爲視圖或其子視圖添加約束。*(來自[Apple docs](https://developer.apple.com/library/ios/documentation /Uikit/reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/updateViewConstraints)) – testing