虚拟视图在iOS中有什么作用?

时间:2017-05-05 13:05:00

标签: ios uikit

现在我正在阅读the official documentation about the UILayoutGuide。 简而言之,UILayoutGuide类替换虚拟视图,它可以表示视图之间的空间,也可以封装用户界面。 但是,我无法理解其含义。

首先,关于虚拟视图创建的空间,我们需要这个吗?我们可以使用AutoLayout非常容易地定义空间。我不明白虚拟视图的必要性。

其次,封装是什么意思?我不明白他们想说什么。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

当自动布局可以正确处理您的观看时,您不需要虚拟视图。但在某些情况下,例如,您连续有4个按钮,下面有3个按钮,有时很难自动布局以正确设置约束。为此你可以使用一个空的"虚拟视图"前4个按钮作为父视图对齐,后3个按钮相同。

因此,更容易为2"虚拟视图设​​置正确的约束"然后使用虚拟视图在这些视图中正确约束按钮。

封装意味着,当你想重新排列20个像素的4个按钮时,你只需要将虚拟视图向上移动20个像素,而不是单独手动移动4个按钮。

这意味着,您有一个更好的概述,就像封装代码以便重用或可读性一样

答案 1 :(得分:1)

  

传统上,有许多自动布局技术需要虚拟视图。虚拟视图是一个空视图,它没有自己的任何可视元素,仅用于在视图层次结构中定义矩形区域。例如,如果要使用约束来定义视图之间空白空间的大小或位置,则需要使用虚拟视图来表示该空间。如果要将一组对象居中,则需要一个虚拟视图来包含这些对象。同样,虚拟视图可用于包含和封装部分用户界面。虚拟视图使您可以将大型复杂的用户界面分解为自包含的模块化块。如果使用得当,它们可以大大简化自动布局约束逻辑。

     

将虚拟视图添加到视图层次结构中会产生许多成本。首先,创建和维护视图本身是成本。其次,虚拟视图是视图层次结构的完整成员,这意味着它会增加层次结构执行的每个任务的开销。最糟糕的是,隐形虚拟视图可以拦截用于其他视图的消息,从而导致很难找到的问题。

     

UILayoutGuide类旨在执行以前由虚拟视图执行的所有任务,但要以更安全,更有效的方式执行。布局指南不定义新视图。它们不参与视图层次结构。相反,他们只是在他们自己的视图坐标系中定义一个矩形区域,可以与自动布局交互。

来自your source

答案 2 :(得分:0)

请在此处查看我的回答:https://stackoverflow.com/a/20865342/341994

从讨论中可以看出,解决自动布局下视图等间距问题的方法是引入不可见的“间隔视图”,如下所示(显示不可见的间隔视图)黑色):

enter image description here

那是因为你不能写一个约束说约束必须是相等的;你只能写一个约束,说 views 有相同的约束。

那些不可见的间隔视图是虚拟视图。 UILayoutGuide是一种创新,它提供了虚拟视图的轻量级替代方案:它们执行虚拟视图所做的事情,但没有实际视图的开销 - 正如我在此解释我的答案:https://stackoverflow.com/a/31523872/341994而且,正如我在那里所说,这是确切地说UIStackView会自动为您做什么:它构造那些UILayoutGuide对象,这样您就不必这样做了。

相关问题