2015-02-10 37 views
0

我從故事板中查看ViewController中的視圖。我嘗試改變其約束使用的代碼:iOS NSAutoLayoutConstraint:未設置故事板中的視圖

_viewFromStoryboard.translatesAutoresizingMaskIntoConstraints = NO; 

NSLayoutConstraint *w = [NSLayoutConstraint constraintWithItem:_viewFromStoryboard attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f]; 
NSLayoutConstraint *h = [NSLayoutConstraint constraintWithItem:_viewFromStoryboard attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f]; 
NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:_viewFromStoryboard attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]; 
NSLayoutConstraint *centerY = [NSLayoutConstraint constraintWithItem:_viewFromStoryboard attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]; 

[self.view addConstraints:@[w, h, centerX, centerY]]; 

[_viewFromStoryboard setNeedsUpdateConstraints]; 
viewDidLayoutSubviews方法

,但制約因素似乎並沒有更新。

我在做什麼錯了?

+0

你應該調用LayoutIfNeeded方法更新約束... – 2015-02-10 12:37:29

+0

嘗試它,但不起作用 – Alterecho 2015-02-10 14:53:50

+0

更新前和更新後調用此[self.view layoutIfNeeded]適用於我 – 2015-02-11 06:34:28

回答

0

該視圖是否已經在故事板中設置了約束條件?

要更改已經設置的約束,我通常會將CTRL從故事板中的約束拖動到類標題中,併爲每個想要更改的每個添加一個IBOutlet。

然後在代碼中,只需更改常數值。這樣你就可以改變已經在故事板中設置的約束。

我注意到你的代碼中,你也將寬度和高度設置爲0它似乎?

+0

它不是在故事板中設置。這就是我們如何設置兩個視圖的寬度相等,不是嗎? – Alterecho 2015-02-10 14:53:32

+0

此代碼是否應該放在viewDidLoad中? viewDidLayoutSubviews可能會多次調用,每次您將添加約束的副本?你還記得打電話給[super viewDidLayoutSubviews]嗎? – 2015-02-10 15:17:35

+0

viewDidLoad似乎沒有改變影響事物(即使設置視圖的位置在viewDidLoad中也不起作用)。 – Alterecho 2015-02-10 15:52:02