我需要一个 View 在纵向模式下垂直居中,并在横向模式下向右移动(例如 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 约束吗?
最佳答案
我看到两个选项:
- 添加使
contentView
的 CenterX =myImage
的 CenterX 的约束,并保存对该约束的引用。当设备旋转到横向时,将Constraint的常数设置为150;当旋转为纵向时,将常数设置为0。 - 当设备旋转时,删除
contentView
的水平位置和大小约束,并为您的设备方向添加适当的约束。
第一个选项更简单,但如果新的 Apple 设备具有不同的尺寸,则不太适合 future 。如果您选择第一个选项,则不需要 @"H:|-(577)-[contentView]-(257)-|"
约束,但需要一个约束告诉 contentView
它的水平尺寸。
如果您希望我详细说明任一选项,请告诉我。
关于ios - 自动布局约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711447/