2017-07-25 55 views
1

我有一個包含幾個約束的視圖。其中一些已關閉「已安裝」複選框。我正在嘗試根據應用程序的狀態激活和停用特定的約束。激活在故事板中被卸載的約束條件

問題是,當安裝的複選框關閉時,我無法激活約束條件,也無法停用已安裝的約束條件。 我需要提到的是,我在我的大小類屬性中使用強引用來約束。在激活/關閉約束條件後,我還嘗試了一種調用setNeedsUpdateConstraints和updateConstraintsIfNeeded,setNeedsLayoutlayoutIfNeeded的方法。

我找不到有關此行爲的任何文檔,爲什麼會發生這種情況?

+0

可能是你忘了約束與IBOutlet中的變量連接?或者你在故事板中有不同的VC課程?要檢查這個添加斷點到viewDidLoad函數並查看IBOutlet變量。 –

+0

您應該連接一個IBOutlet進行約束,並根據您的要求更新constraintVariable.active = Yes/No。之後調用layoutIfNeeded方法。 –

+0

我檢查了IBOutlets,他們沒事。當我調用setActive時,它甚至改變了活動屬性的值,但是當我調試View Hierarchy時,我找不到卸載和激活的約束(通過代碼)。我只有已安裝的屬性(我已將它們設置爲通過代碼停用)。我也叫layoutIfNeeded和約束/佈局更新的每個可能的組合。 – Dan

回答

2

要確保你把你的代碼在正確的地方

override func viewDidLayoutSubviews() { 
// write your code here 
} 
+0

謝謝。這似乎工作。 – Dan

+0

@不用客氣 –

2

OutLet例如用於特定的約束:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraint;) 
//For Installing 

[self.view addConstraint: constraint] 

//For Uninstalling 

[self.view removeConstraint: constraint] 
+0

尼斯爲我工作! –