【问题标题】:Is it possible to set constraints for root view in XIB?是否可以在 XIB 中为根视图设置约束?
【发布时间】:2018-09-22 19:48:03
【问题描述】:

最近我关注tutorial 在 Swift 中创建框架,它们创建可重用的视觉效果视图,就像我们在 Xcode 构建成功弹出窗口中看到的那样。我正在一步一步地做 UI,他们创建了一个新的 xib 文件并将UIVisualEffectView 拖放到其中。

在上图中,我们可以看到UIVisualEffectView 不包含任何约束。它仅在尺寸检查器中具有自动调整大小的蒙版(如预期的那样)。


但是教程中的以下图片突然包含了它的根视图的所有必要约束。

我已经知道我们不能,默认情况下为根视图设置任何约束。但在本教程中,作者似乎已经添加了相同的约束。我只是想知道是否有可能做到这一点,还是我错过了任何基本想法?

编辑:

根视图的约束。

【问题讨论】:

  • 约束设置在根视图的子视图上。
  • 嗯...实际上,在该链接之后,我看不到他如何在视图上设置宽度和高度约束。也许他正在使用临时/测试版 Xcode?​​span>
  • 为什么投反对票?根据已编辑的问题(最后一个屏幕截图),约束似乎属于 UIVisualEffectView
  • 我完全不同意反对票。这个问题表述得很好,并且诚实而光荣地提出。确实,想知道该屏幕截图中发生了什么似乎很有见地。

标签: ios xcode autolayout xib


【解决方案1】:

好的,找到了一种方法……

尚未进行任何测试,因此我不确定这些约束是否真的设置正确,或者是否会在运行时被自动布局使用,但这会将它们放在那里。

创建一个新的“视图”XIB - 这就是它的开始方式:

给这个视图添加一个视觉效果视图,并给它230 / 230的宽度和高度约束:

现在,将 Visual Effects 视图 * 从普通视图中拖到空白处:

你会看到它保持了它的约束。然后删除原视图,添加其他元素:

【讨论】:

  • 不错的答案。我也做了同样的事情,但是我没有拖动子视图,而是在 Storyboard 中创建了UIVisualEffectView,添加了约束,并将其复制粘贴到 XIB 中。
【解决方案2】:

正如您在屏幕截图中实际看到的那样,宽度/高度约束属于 View(Visual Effect View 的第一个子视图)。

看绿线:

【讨论】:

  • 这就是它的样子......但是,与 OP 一样,我无法设置这些约束。可以吗?
  • 在我检查源代码中的 xib 时,高度和宽度是为根视图设置的,即视觉效果视图。
【解决方案3】:

我不知道你的教程是怎么回事(我也无意看),我不知道屏幕截图是在什么情况下实现的。但我确实知道视图控制器的主视图如何调整大小的规则。

任何视图控制器的主视图都必须在放入界面时调整大小。因此,情节提要中的大小毫无意义。这就是为什么你不能给它一个自动布局的大小。

如果将 xib 或 storyboard 中的视图用作视图控制器的 主视图,那么设置约束是没有意义的(而且是错误的)放在它上面,因为它将是视图控制器的 parent 的任务(或者,在窗口的 rootViewController 的情况下,窗口的)在将视图放入时设置视图的大小层次结构。

如果视图控制器想要在将其放入视图层次结构(例如,作为弹出框)时对其视图的大小进行投票,这就是内容大小(首选显式大小)的用途。但即便如此,父母还是控制实际发生的事情的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2015-08-30
    • 2014-08-23
    • 2020-07-12
    • 2021-01-14
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多