是否可以在XIB中为根视图设置约束?

时间:2018-04-12 15:17:47

标签: ios xcode autolayout xib

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

Empty UIVisualEffectView without constraints

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

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

UIVisualEffectView with constraints

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

修改

根视图的约束。

UIAfterEffectView constraints

3 个答案:

答案 0 :(得分:3)

好的,找到了一种方法来做到这一点......

Haven没有进行任何测试,因此我不确定约束是否真正设置正确或将在运行时自动布局使用,但这将是把它们放在那里。

创建一个新的" View" XIB - 这就是它的开始:

enter image description here

将视觉效果视图添加到此视图,并为其指定宽度和高度约束230/230:

enter image description here

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

enter image description here

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

enter image description here

答案 1 :(得分:2)

我不知道你的教程会发生什么(而且我无意观看),我不知道在什么情况下屏幕截图已经实现。但我确实知道视图控制器主视图的大小规则。

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

如果要将 xib 或storyboard中的视图用作视图控制器的主视图,则设置约束是没有意义的(并且会是错误的)在它上面,因为它将是视图控制器的的任务(或者,在窗口的rootViewController窗口的情况下),在它放置时设置视图的大小它进入了等级。

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

答案 2 :(得分:1)

正如您在屏幕截图中看到的那样,宽度/高度限制属于ViewVisual Effect View的第一个子视图)。

看看绿线:

enter image description here