【问题标题】:Xcode autolayout: keep minimum between height and width of squareXcode自动布局:保持正方形的高度和宽度之间的最小值
【发布时间】:2015-03-25 15:27:54
【问题描述】:

我为 UIView 使用了固定的纵横比,所以它是方形的。 然后我将固定的尾随和前导空间设置为屏幕边框,它们是相同的。并保持垂直居中位置。 所以结果我在屏幕中心有一个正方形,前后有一些相等的空间,如果屏幕更宽,正方形就更大。这在纵向上非常有效。 但是当我使用横向时,基于前导和尾随空间的正方形大小变得大于设备的高度,因此它不适合。 这是一种基于约束条件并选择最小的二维空间的方法吗?这是一种让 iPhone 和 iPad 的屏幕边框间距不同的方法吗?

【问题讨论】:

  • 因为你已经给了尾随和前导空间....在横向模式下宽度会改变,为什么?如果你想让它在视图中居中,你的方形框给出水平中心和垂直中心以及宽度和高度,它可以在纵向和横向模式下工作

标签: ios xcode swift autolayout constraints


【解决方案1】:

为 Top 添加一个不等式约束,使间距大于或等于您的最小值。

这实际上会与您的其他约束产生冲突。您可以通过降低前导和尾随约束的优先级来解决这个问题。不幸的是,这留下了歧义。当superview比正方形更宽时,Leading约束还是Trailing约束应该成立?

实际上,您都不想持有。这会使广场偏向一侧或另一侧。您希望正方形居中。因此,删除 Trailing 约束,而是添加一个约束以保持正方形在其父视图中居中。

所以,总结一下:

  • 两个约束,垂直和水平,以保持正方形居中。
  • 一个顶部约束,使那里的空间保持大于或等于最小值。
  • 保持空间等于最小值但降低其优先级的前导约束。

当superview窄于高时,将容易满足Top约束(空间会大于最小值)。因此,Leading 约束将控制正方形的大小。

当父视图的宽度大于高度时,Leading 约束将尝试使正方形大到使其顶部和底部超出其父视图。但是,Top 约束将阻止这种情况发生。系统将允许打破领先约束,因为它的优先级较低,但它仍会尝试尽可能接近满足它。这将确保正方形尽可能大。

【讨论】:

    【解决方案2】:

    查看故事板中的尺寸等级:https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html

    当你的约束被选中时,你可以点击Constant旁边的小+,然后选择一个尺寸等级来拥有一个单独的约束。如果您在横向使用 iPhone,请查看Any Width x Compact Height

    查看这些操作的一个很酷的方法是显示助理编辑器(中间的互锁环图标)。从出现的视图顶部的菜单中,选择预览和故事板的名称。然后,您可以为不同的设备添加预览,并查看您的约束将如何显示在每个设备上。您还可以在纵向和横向之间来回旋转这些预览。这是一个非常有用的工具,可以帮助您了解何时正确设置了约束。

    【讨论】:

    • 答案中的第一个链接已过时。
    【解决方案3】:

    为视图垂直和水平居中添加两个约束。

    为宽度添加两个约束:

    • 宽度等于父视图(优先级 750)
    • 宽度小于或等于父视图(优先级 750)

    添加Height小于或等于superview(优先级1000)的约束。

    另一个宽高比为 1:1 的约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多