0

我会很简短,很清楚。我想使用约束来执行下图中的操作。有什么建议或解决方案吗? 在此处输入图像描述在此处输入图像描述

说明:
有颜色的地方是 UIViews,包含 for ex。4 个标签。那么我应该使用什么约束来操作第二个 UIView 以便在纵向模式下位于第一个并且在横向模式下位于它旁边?

4

1 回答 1

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

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

于 2013-11-12T16:37:27.790 回答