使用自动布局的屏幕外UIView(以编程方式)

时间:2015-07-23 18:22:53

标签: ios uiview autolayout uiviewanimation nslayoutconstraint

这在pre-autolayout域中非常简单,但是将子视图插入超级视图以使子视图完全或部分在屏幕外的编程方式是什么:

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

这个问题的答案将帮助我使用自动布局实现幻灯片输入动画。

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

经过几个小时的挣扎和尝试后,我设法用以下代码生成所需的结果。我没有为top设置任何约束,而是需要高度约束,因此子视图知道要走多远。

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

我希望在动画块中更改约束值会让我进行滑入/滑出过渡。