如何解决这个带有约束的自动布局“难题”?

Posted

技术标签:

【中文标题】如何解决这个带有约束的自动布局“难题”?【英文标题】:How do I solve this Auto Layout "puzzle" with constraints? 【发布时间】:2014-11-02 01:25:50 【问题描述】:

左边是布局的正常状态。右边是布局的展开状态。

我的问题是我不知道如何让粉色框在它们的单元格中居中,并且随着布局向任何方向增长,粉色框之间的绿线连接起来。 只有这两个视图的 AutoSizing.xib 可以在这里找到:https://dl.dropboxusercontent.com/u/6979623/AutoSizing.xib

【问题讨论】:

【参考方案1】:

有两种方法可以让粉色框在超级视图的四个象限内居中:

    您可以添加四个不可见的视图,它们甚至可以拆分此主视图的四个象限(使用约束将它们固定到各自的角,并使用另一组约束使它们的宽度和高度相等)。如果我要在 VFL 中表示它(只是因为它是表示所有这些约束的简洁方式),它可能是这样的:

    H:|[quadrant1][quadrant2(==quadrant1)]|
    H:|[quadrant3(==quadrant1)][quadrant4(==quadrant1)]|
    V:|[quadrant1][quadrant3(==quadrant1)]|
    V:|[quadrant2(==quadrant1)][quadrant4(==quadrant1)]|
    

    然后,您可以将粉色视图置于这四个象限视图的中心。

    您可以添加使用乘数的中心约束,以在它们的共享父视图中偏移这些粉红色方块。 Interface Builder 最近才获得乘数支持,在我看来,它并不是超级可靠,所以当我想使用乘数时,我通常会退回到以编程方式添加它们。

一旦您正确布置了粉红色框,它们之间的绿线就分别是水平线或垂直线的固定间距前导/尾随或顶部/底部。将其与固定宽度和中心对齐相结合,您就完成了。最重要的是,如上所述,注意粉红色框的位置,然后绿色线条的创建变得非常容易。

【讨论】:

作为第三种选择,如何在主视图中心放置一个不可见的框(宽度和高度等于父视图的一半),并将粉红色的框固定在其角落?

以上是关于如何解决这个带有约束的自动布局“难题”?的主要内容,如果未能解决你的问题,请参考以下文章

Interface Builder 运行时自动布局约束阻止视图占用固有大小,我该如何解决这个问题?

Xcode 6.3 故事板自动布局约束

自动布局问题

自动布局约束错误

带有自动布局(snapkit)的圆形视图?

Swift UIView 自动布局和约束