【问题标题】:How to setup constraints to invade another view如何设置约束以侵入另一个视图
【发布时间】:2020-08-10 22:41:30
【问题描述】:

我一直听说要设置约束以使视图与视图之间有距离,但我想知道是否可以设置一个视图来入侵另一个视图。

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

最终结果是这样的:

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

【问题讨论】:

  • 是的,当然你可以设置约束让一个视图与另一个视图重叠。你试过了吗?
  • 很高兴知道@DonMag,你知道吗?或者我在哪里可以找到教这个的资源?我已经搜索了一段时间,但没有找到任何有关它的资源。
  • 这真的只是基本的自动布局......那里有数百(可能数千)自动布局教程/文章/博客文章/文档。最好的学习方法是完成一堆,然后自己尝试不同的东西。
  • @DonMag 所以我只需要通过“重叠”搜索?
  • 通过搜索“重叠”您不太可能找到很多...看看我的答案中的布局。

标签: swift autolayout constraints ios-autolayout


【解决方案1】:

这可以通过基本的自动布局来完成——约束视图以使它们重叠绝对没有错。

这是一个简单的例子:

注意左边大纲中的最后一个约束:

BoxView.top = ball.bottom - 24

这将图像视图的底部置于“盒子”视图顶部下方 24 磅...换句话说,它有 24 磅的“重叠”。


编辑

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

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

ball.bottom = BoxView.top + 24

这可能更直观一些。


编辑 2

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

我无法复制它,但我曾在图像视图中看到过这种情况。即使使用Debug View Hierarchy 会在另一个视图之前显示图像视图,但它会被渲染为就好像它在它后面一样。在我见过的情况下,在 Storyboard 中重新制作控制器已经解决了这个问题。

但是,它可能不会,所以...

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

@IBOutlet var ball: UIImageView!

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

【讨论】:

  • 我想我快到了@DonMag,球图像视图在正方形视图中得到了正确的空间,但是当我编译时,它在正方形后面:imgur.com/a/k7NlUD9我试过层次结构变薄,但它一直在白色方块视图后面。我什至尝试使用你的 boxview.bottom = 120 但它没有用,可能它不相关但我还是测试了
  • @virtu - 请参阅我的答案底部的 Edit 2。
  • 它现在正在使用 viewDidLayoutSubview() 方法!非常感谢你。您认为再次从零开始构建它以测试您关于“在 Storyboard 中制作控制器已解决问题”的评论是否是一个不错的尝试。让我的代码独立于 viewDidLayoutSubview() 方法?
  • 顺便说一句,从来没有听说过 viewDidLayoutSubview() 方法,可能是因为我开始了 swift 开发人员的生活,但无论如何谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多