当我以编程方式添加没有约束的子视图时会发生什么?

时间:2018-04-12 08:27:46

标签: ios swift uiview autolayout autoresizingmask

我经常遇到类似view.addSubview(myAwesomeTableView)的内容。

显然,自动布局中没有设置约束。那么系统如何确定myAwesomeTableView的放置方式和位置。它会简单地匹配父视图的大小吗?

translatesAutoresizingMaskIntoConstraints与此有什么关系?

2 个答案:

答案 0 :(得分:2)

默认情况下,每个UIView的框架都是CGRect.zero

如果启用了translatesAutoresizingMaskIntoConstraints(默认情况下已启用),则可以使用autoresizingMask,系统会为您生成约束。

Read more about the autoresizingMask property here.

答案 1 :(得分:2)

  

那么系统如何确定如何以及在何处放置   myAwesomeTableView。它会简单地匹配父视图的大小吗?


基本上,它取决于myAwesomeTableView(子视图)frame。添加子视图时,它会自动添加到(0,0)原点,因此子视图框将为:

x: 0
y: 0
width: subview width.
height: subview height.

请注意,如果未确定子视图帧,则默认情况下宽度和高度为0.

  

translatesAutoresizingMaskIntoConstraints必须做什么   这个?


改编自translatesAutoresizingMaskIntoConstraints文档:

  

一个布尔值,用于确定视图的自动调整遮罩   被转换为自动布局约束。

这意味着系统会创建一组约束来复制视图自动调整掩码指定的行为,您可以通过编辑其帧值直接修改所需的视图位置(原点)和大小。

请注意:

  

默认情况下,对于您的任何视图,该属性都设置为true   以编程方式创建。如果在Interface Builder中添加视图,则   系统自动将此属性设置为false。

在以编程方式向视图添加约束时,请注意您必须将translatesAutoresizingMaskIntoConstraints设置为false

myView.translatesAutoresizingMaskIntoConstraints = false

意味着"我将自己处理视图的约束"否则不会激活添加的约束。

此外,您可能需要检查: