Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动布局约束_Ios_Objective C_Autolayout_Nslayoutconstraint - Fatal编程技术网

Ios 自动布局约束

Ios 自动布局约束,ios,objective-c,autolayout,nslayoutconstraint,Ios,Objective C,Autolayout,Nslayoutconstraint,我需要一个视图在纵向模式下垂直居中,在横向模式下向右移动(比如150像素) 我试图设置一些限制条件,但似乎无法确定: [myImage addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(577@700)-[contentView]-(257@800)-|" options:0

我需要一个视图在纵向模式下垂直居中,在横向模式下向右移动(比如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成为一个约束,并保存对该约束的引用。当设备旋转到横向时,将约束的常量设置为150;旋转到纵向时,将常量设置为0
  • 当设备旋转时,删除
    contentView
    的水平位置和大小限制,并为设备的方向添加适当的限制
第一种选择比较简单,但如果一个新的苹果设备具有不同的尺寸,那么它就不那么经得起未来考验。如果使用第一个选项,则不需要
@“H:|-(577)-[contentView]-(257)-|”
约束,但需要一个约束来告诉
contentView
其水平大小


如果您想让我详细说明这两个选项,请告诉我。

这很有效。我没有考虑保存约束,因为我想尝试在方向更改事件中避免重置约束。只是感觉约束不是这样设计的。您需要同时保存约束和约束中的视图,这会让人感觉乏味,如果需要更改大量约束,可能会很快失去控制。谢谢你的帮助!