2015-11-24 4 views
0

Я использую autolayout без sb и xib. Но у меня есть некоторые проблемы в последнее время.проблемы с автозапуском по коду?

я не понимаю, какое представление я должен использовать, чтобы реализовать следующие два метода

- (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)]]; 

и двух подвидов: view1 , view2.When я использовать autolayout, чтобы добавить ограничения для описания 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

Смежные вопросы