2015-07-23 2 views
2

Это очень просто сделать в домене pre-autolayout, но что такое программный способ вставки subview в супер-просмотр, так что subview полностью или частично отключен от экрана:Offscreen UIView с использованием Auto-layouts (программно)

enter image description here

пример кода, который бы добавить подвид, так что его 5 пикселей от верхней части, снизу, слева и справа:

NSDictionary* viewsDictionary = @{@"subview":subView}; 
[self.view addSubview:subView]; 
NSArray* horizontalMargins = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[subview]-5-|" options:0 metrics:nil views:viewsDictionary]; 
NSArray* verticalMargins = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[subview]-5-|" options:0 metrics:nil views:viewsDictionary]; 

[self.view addConstraints:horizontalMargins]; 
[self.view addConstraints:verticalMargins]; 

ответ на этот вопрос поможет мне реализовать слайд в -out анимации с использованием автоматических макетов.

ответ

0

Через несколько часов изо все сил и попыток мне удалось произвести желаемый результат следующего кода. Я не устанавливаю ограничение для вершины, но вместо этого требуется ограничение высоты, поэтому subview знает, как сильно идти.

NSDictionary* viewsDictionary = @{@"subview":subView}; 
NSArray* horizontalMargins = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[subview]-0-|" options:0 metrics:nil views:viewsDictionary]; 

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]; 

NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-200]; 

heightConstraint.active = YES; 
bottomConstraint.active = YES; 

[NSLayoutConstraint activateConstraints:horizontalMargins]; 

Я надеюсь, что изменение значений ограничений в блоке анимации даст мне переход влево/вправо.

0

Я не использую NSLayoutConstraint напрямую, но использую PureLayout (https://github.com/smileyborg/PureLayout), чтобы сделать синтаксис немного более дружественным.

Использование Purelayout Я считаю, что вы могли бы использовать следующий код:

[subView autoPinEdgeToSuperviewEdge:ALEdgeTop 
          withInset:-5.0f]; 

[subView autoPinEdgeToSuperviewEdge:ALEdgeLeft 
          withInset:5.0f]; 

[subView autoPinEdgeToSuperviewEdge:ALEdgeRight 
          withInset:-5.0f]; 
+0

не хотите, чтобы внешняя библиотека была чем-то простым, вы можете проверить мой ответ – 2cupsOfTech

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