ios - 自动布局约束

标签 ios objective-c autolayout nslayoutconstraint

我需要一个 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/

相关文章:

php - 用于 iphone 应用程序的 PHP 中的通知 cron

ios - 如何以编程方式获取 iOS 崩溃日志?

ios - 当应用程序进入前台时 Webthread 锁定主线程

ios - UITableViewCell 中的自动布局约束不匹配

ios - 创建易于使用的扩展/功能以实现可达性(主机/互联网 WIFI、蜂窝)

ios - dataTaskWithRequest 之后的 Dispatch_async

ios - 我可以将两个应用捆绑/打包成一个吗?

ios - UITableView 转换属性在 iOS 8 中不起作用

swift - 动画不适用于自动布局(快速)

ios - 无法在 UIScrollView 和 AutoLayout 中使用 AspectFill 滚动 UIImageView