具有相对宽度/高度的 IOS8 自动布局

标签 ios8 storyboard autolayout constraints orientation

我需要使用单个 UIControl 自动布局 Storyboard UIView。 UIControl 应该居中,需要具有 1:1 的纵横比,并且应该始终使用 90% 的 super View 宽度或高度,具体取决于设备方向而不进行剪裁。

我添加了 4 个约束

  • 中心 Y 对齐 - View - super View
  • 中心 X 对齐 - View - super View
  • 等宽 - View - super View ,乘数设置为 0.9
  • 纵横比 - View - 乘数设置为 1:1 的 View

  • 此设置在纵向模式下工作正常,但在横向模式下失败。 (见下图)

    我需要什么样的约束来解决这个问题。如果设备旋转,我是否必须更改约束?

    人像模式
    Portrait mode

    横向模式 - 错误
    Landscape mode - wrong

    横向模式 - 样机。这就是我想要的。
    Landscape mode - ok

    最佳答案

    这是一种方法:

  • 从上面列出的四个约束开始:中心 X、中心 Y、等宽(0.9 乘数)和纵横比,所有的优先级都是 1000。
  • 将 Equal Widths 的优先级更改为 750。这将允许 Auto Layout 在必要时忽略或修改此约束。
  • 添加一个 Equal Heights (View - Superview) 约束,但不是等于,而是使用乘数为 0.9 的小于或等于。将其优先级保留为 1000。

  • 现在,当您处于纵向时,Auto Layout 将能够像以前一样将红色框的宽度设为 90%,从而满足您的所有约束。当您切换到横向时,等高约束将确保红色框不会超过高度的 90%,因为此约束具有 1000 优先级,但自动布局也会使框尽可能大以尝试最好地服务于等宽约束。

    关于具有相对宽度/高度的 IOS8 自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30439214/

    相关文章:

    swift - 选项卡中的自动布局

    ios - 核心数据 - 不能将 nil 设置为可选关系

    swift - iOS SWIFT 应用程序 - 如何全局忽略 SIGPIPE 信号?

    ios - 如何减少代码中的 if else 条件?

    uitableview - 基于对 UIAlertView 的响应从 UITableViewCell 进行条件 Segue 导航

    swift - 如何使用 SnapKit 为 UITextField 和 UILabel 设置约束?

    objective-c - 从 UIView/NSObject 类显示 UIAlertController

    ios - self.navigationController 使用 Storyboard到 Storyboard导航始终返回 nil

    ios - 如何在 Xcode 5 的 Storyboard编辑器中滚动 UITableView?

    ios - 以编程方式在 UIView 上设置 ViewController