如何让superview适合自动布局

时间:2017-02-08 16:47:04

标签: ios autolayout interface-builder

我有一列具有内在大小(图像,标签等)的多个动态子视图。如何让superview适合autolayout中的子视图。

如果子视图不是动态的,我只会将最大的子视图的前导/后沿约束到superview。像这样

enter image description here

我以为我能够与前沿对齐,然后尾随约束为>= 8,逻辑为“如果子视图太窄,后缘可能大于8,但如果子视图广泛扩展超视图,因此至少有8的后沿。“但IB不喜欢那个

注意事项:

  • 无法使用堆栈视图
  • 子视图具有动态宽度。因此,在示例中,任何行都可以是最宽的。

2 个答案:

答案 0 :(得分:0)

好的,这是我如何运作的。不确定这是否是最佳方式。

  1. 将所有尾随约束设置为>=
  2. 在superview上设置宽度
  3. 为超视图宽度约束创建一个出口
  4. 在ViewController中,覆盖viewDidLayoutSubviews()
    1. 计算所有子视图中的最大宽度
    2. 将您的边距添加到该宽度
    3. 将超视图宽度设置为已计算的最大值

答案 1 :(得分:0)

按照以下步骤

  1. 将视图(例如视图A)添加到主视图中。
  2. 将所有三个标签(例如标签1,标签2,标签3)添加到视图A作为子视图。
  3. 将视图A定位到四面的超视图。更改顶部,底部,左侧和右侧的约束大于等于(> =)10,其中优先级根据需要设置(因为如果内容扩展,则避免视图A伸出屏幕)。
  4. 向标签1添加约束,即将其固定到视图A的顶部,右侧和左侧,常数等于0.标签1的标签2顶部的顶部等于10,其中约束优先级设置为必需
  5. 按照相同的步骤标记2。
  6. 按照相同的步骤标记3.即,将其固定到标签2的底部和视图A的左侧。将其固定到视图A的底部,其中底部约束应该等于0,其中优先级设置为低。< / LI>

    您可以根据自己的要求更改约束值。它会工作。 无论标签是否缩小,您都可以将抗压强度优先级更改为低。

    更新:对于下面提到的git链接

    对于ViewA,添加以下约束,

    • ViewA中心X和Y到SuperView中心X和Y(= 0 @ 1000)
    • ViewA领先和SuperView领先(&gt; = 10 @ 1000)
    • ViewA尾随和SupreView尾随(&gt; = 10 @ 1000)
    • ViewA Top和SuperView Top(&gt; = 10 @ 1000)
    • ViewA底部和底部尾随(&gt; = 10 @ 1000)
    • Image1 to superview Leading,top(= 0 @ 1000)
    • Image1到superview尾随(&gt; = 0 @ 1000)
    • Image1到Image2 Bottom(= 10 @ 1000)
    • Image2 to superview Leading(= 0 @ 1000)
    • Image2 to superview trailing(&gt; = 0 @ 1000)
    • Image2 to Image3 Bottom(= 10 @ 1000)
    • Image3 to superview Leading(= 0 @ 1000)
    • Image3 to superview trailing(&gt; = 0 @ 1000)
    • Image3到superView Bottom(= 0 @ 999)

    然后选择ViewA并设置更新帧,仍然会显示红色标记,表示缺少约束。仍然可以添加缺少的约束xcode建议的内容,但将其设置为在构建时删除。更新帧并运行。希望它按照您的要求运作。