0

假设我有 3 个视图

 A|----------|
  | B|-----| |
  |  | C ▢ | |
  |  |_____| |
  |__________|    

如果我有一个涉及视图 B 和视图 C 的约束。

文档建议添加到视图 C 是非法的:

约束必须只涉及接收视图范围内的视图。具体来说,所涉及的任何视图都必须是接收视图本身,或者是接收视图的子视图。添加到视图的约束被称为由该视图持有。评估约束时使用的坐标系是包含约束的视图的坐标系。

  • 将其添加到视图 A 或视图 B 是否重要?
  • 添加到一个超级视图而不是另一个超级视图有什么影响吗?
  • 有任何方便的含义吗?(例如,如果所有约束都在一个地方,它更容易管理?)
4

1 回答 1

1
  • 将其添加到视图 A 或视图 B 都没有关系,只要它们满足您从文档中引用的要求即可。
  • 我不知道有任何影响,布局都是一样的。 根据 UIView 头文件中的注释(参见下面的摘录),约束不一定添加到您显式添加到的视图中,它们通常安装在与约束中涉及的视图最近的祖先处(并且视图是被认为是它自己的祖先)。
  • 两种方式本质上都不比另一种方便(除非您没有对 A 的引用,在这种情况下,将其添加到 B 显然更方便)。这取决于您的应用程序的设置(您有什么出口/参考等)。 鉴于约束没有安装在您明确添加它们的位置,这两种方式都不会更方便。不过,我认为将它们添加到系统最终将安装它们的位置会更有效。

编辑:

此评论来自 UIView.h,上面用于安装约束的方法:

/* A constraint is typically installed on the closest common ancestor of the views involved in the constraint. 
 It is required that a constraint be installed on _a_ common ancestor of every view involved.  The numbers in a constraint are interpreted in the coordinate system of the view it is installed on.  A view is considered to be an ancestor of itself.
 */
于 2013-08-11T20:46:26.037 回答