2

我需要一个视图在纵向模式下垂直居中并在横向模式下向右移动(比如 150 像素)。

我尝试设置一些约束,但似乎无法确定:

[myImage addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(577@700)-[contentView]-(257@800)-|"
                                                                options:0
                                                                metrics:nil
                                                                  views:NSDictionaryOfVariableBindings(contentView)]];

NSLayoutConstraint *myConstraint = [NSLayoutConstraint constraintWithItem:contentView
                                                    attribute:NSLayoutAttributeCenterX
                                                    relatedBy:NSLayoutRelationEqual
                                                       toItem:myImage
                                                    attribute:NSLayoutAttributeCenterX
                                                   multiplier:1.0
                                                     constant:-1];
myConstraint.priority = 700;

[myImage addConstraint:myConstraint];

这适用于横向模式,但不适用于纵向。在纵向中,左侧约束 (570@700) 失败,然后左侧约束可以成功 (257@800) 并且中心 X 永远不会实现。我需要第一组(570@700 和 257@800)都失败,以便它可以诉诸中心 X 约束。

还是我应该放弃 centerX 约束?

4

1 回答 1

2

我看到两个选项:

  • 添加使contentView's CenterX = myImage's CenterX 的约束,并保存对约束的引用。当设备旋转到横向时,将Constraint的常数设置为150;当旋转为纵向时,将常量设置为 0。
  • 当设备旋转时,移除contentView的水平位置和尺寸约束,并为您的设备方向添加适当的约束。

如果新的 Apple 设备具有不同的尺寸,则第一种选择更简单,但不会过时。如果您使用第一个选项,则不需要@"H:|-(577)-[contentView]-(257)-|"约束,但您需要一个约束来告知contentView其水平尺寸。

如果您希望我详细说明任一选项,请告诉我。

于 2013-02-05T16:26:34.880 回答