2015-11-24 59 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