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

Offscreen UIView using Auto-layouts (programmatically)

这在预自动布局域中非常简单,但是将子视图插入超级视图以使子视图完全或部分离开屏幕的编程方式是什么:

添加子视图的示例代码,使其从顶部、底部、左侧和右侧开始的 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];

这个问题的答案将帮助我使用自动布局实现滑入滑出动画。

我没有直接使用 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];

经过几个小时的努力和尝试,我设法使用以下代码产生了预期的结果。我没有为顶部设置任何约束,而是需要高度约束,以便子视图知道要走多高。

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

我希望在动画块中更改约束值能让我实现幻灯片 in/out 过渡。