如何设置约束以侵入另一个视图

How to setup constraints to invade another view

我总是听说设置约束以使得视图之间有一定的距离,但我想知道是否可以设置一个视图侵入另一个视图。

我的问题是,如果您查看图像,您会看到 2 个视图,一个足球和一个大的白色正方形。

最终结果是这样的:

我想设置一个像图像一样的约束,球总是在白色方形视图内得到一些 space,可以做类似的事情或者我只需要继续绘画、photoshop 或其他一些软件来创建我假装拥有的图像并且不再担心约束(就像变通一样)。

这可以用基本的 auto-layout 来完成——限制视图绝对没有错,所以它们重叠。

这是一个简单的例子:

注意左侧轮廓中的最后一个约束:

BoxView.top = ball.bottom - 24

这使得图像视图的底部比“框”视图的顶部低 24 磅...换句话说,它有一个 24 磅的“重叠”。


编辑

通过交换约束顺序,可能会更清楚一点:

现在,最后一个约束显示:

ball.bottom = BoxView.top + 24

这可能更直观一些。


编辑 2

关于您的评论 - 球图像视图被灰色框视图覆盖...

我无法复制它,但我以前在图像视图中看到过这种情况。即使使用 Debug View Hierarchy 也会在另一个视图的前面显示图像视图,但它会像在它后面一样渲染。在我看到的情况下,re-making Storyboard 中的控制器已经解决了这个问题。

然而,它可能不会,所以...

假设您将图像视图连接到插座,您可以试试这个:

@IBOutlet var ball: UIImageView!

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    view.bringSubviewToFront(ball)
}