如何使用约束为一个视图设置两个不同的布局?

时间:2013-11-12 16:17:05

标签: ios objective-c uiview constraints

我会很简短,也很清楚。我想使用约束来做下图中的内容。 任何建议或解决方案? enter image description here enter image description here

描述:
有色的地方是UIViews,含有ex。 4个标签。那么我应该使用什么约束来操纵第二个UIView,所以在纵向模式下是在第一个下面,在Landscape中是否在它旁边?

1 个答案:

答案 0 :(得分:0)

下面的代码假设您已经在代码中引用了橙色视图和黄色视图。在纵向模式下,您希望它们按顺序排列,以便您可以拥有这样的布局

NSLayoutConstraint *portraitConstraint = [NSLayoutConstraint
                                          constraintWithItem:orangeView
                                          attribute:NSLayoutAttributeBottom
                                          relatedBy:NSLayoutRelationEqual
                                          toItem:yellowView
                                          attribute:NSLayoutAttributeTop
                                          multiplier:1.0f
                                          constant:2.0f];
[self.view addConstraint:portraitConstraint];

在横向模式下,您可以使用布局约束

NSLayoutConstraint *landscapeConstraint = [NSLayoutConstraint
                                           constraintWithItem:orangeView
                                           attribute:NSLayoutAttributeTrailing
                                           relatedBy:NSLayoutRelationEqual
                                           toItem:yellowView
                                           attribute:NSLayoutAttributeLeading
                                           multiplier:1.0f
                                           constant:2.0f];
[self.view addConstraint:landscapeConstraint];

现在这些不是您需要的完整约束列表,如果您构建代码并且只需要代码,您必须将橙色视图保持在顶部,前导和尾随视图,然后在代码中将黄色视图粘贴到纵向视图中的前导,尾随和底部。

在风景中你会看到橙色视图粘在顶部,底部和前方,而黄色视图会粘在顶部,底部和尾部。

上面的约束允许你不需要设置一个高度,但你可能也想说像橙色视图底部是centerY - 1.0在纵向和centerX - 1.0f在横向,从而避免需要宽度和高度,因此不必担心屏幕的大小。中心X和Y位于

之下
NSLayoutConstraint *centerX = [NSLayoutConstraint
                               constraintWithItem:orangeView
                               attribute:NSLayoutAttributeCenterX
                               relatedBy:NSLayoutRelationEqual
                               toItem:self.view
                               attribute:NSLayoutAttributeCenterX
                               multiplier:1.0f
                               constant:-1.0f];
[self.view addConstraint:centerX];

NSLayoutConstraint *centerY = [NSLayoutConstraint
                               constraintWithItem:orangeView
                               attribute:NSLayoutAttributeCenterY
                               relatedBy:NSLayoutRelationEqual
                               toItem:self.view
                               attribute:NSLayoutAttributeCenterY
                               multiplier:1.0f
                               constant:-1.0f];
[self.view addConstraint:centerY];

上述限制应该可以帮助您解决问题。