2015-11-24 58 views
0

我使用自動佈局而沒有sb和xib.But但最近我有一些問題。代碼自動佈局問題?

我不明白,我應該用它來實現以下兩種方法

- (void)addConstraint:(NSLayoutConstraint *)constraint 

- (void)addConstraints:(NSArray<__kindof NSLayoutConstraint *> *)constraints 

例如,我有一個超級視圖以下哪種說法:

_menuView = [[UIScrollView alloc] init]; 
_menuView.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview:_menuView]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_menuView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_menuView)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_menuView(40)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_menuView)]]; 

和兩個子視圖:廠景,view2。當我使用自動佈局來添加約束來描述view1和view2時,

[WHICHVIEW addConstraint:<#(nonnull NSLayoutConstraint *)#>]; 

或 [WHICHVIEW addConstraints:<#(nonnull NSArray < __kindof NSLayoutConstraint *> *)#>];

WHICHVIEW應該是什麼? 讓我換個角度來看,WHICHVIEW依賴於view1和view2之間的關係嗎?如果view1和view2不是同一個層次結構呢?

回答

0

WHICHVIEW應該是您嘗試限制的所有項目的父項。因此,如果您要爲scrollview添加多個視圖並嘗試約束它們,則關於它們自身和scrollview,scrollview應該是WHICHVIEW。如果view1和view2完全不在同一個層次結構中,則不能在兩者之間添加約束。

0

請勿使用任何WHICHVIEW。不要撥打addConstraints:。改爲撥打NSLayoutConstraint.activateConstraints。它的優勢在於它可以爲您工作 - 它會自動將約束添加到正確的視圖中。

+0

只要@rayesquire的目標是iOS 8及以上,我同意。如果不是,則必須使用addConstraint(s),並且所有視圖的父視圖都是要添加的視圖。 –

+0

@MattHorst同意。 – matt