【问题标题】:What happens when I programatically add a subview without constraints?当我以编程方式添加没有约束的子视图时会发生什么?
【发布时间】:2018-09-22 07:28:33
【问题描述】:

我经常遇到view.addSubview(myAwesomeTableView) 之类的东西。

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

translatesAutoresizingMaskIntoConstraints 与此有什么关系?

【问题讨论】:

  • 您需要为该视图手动设置坐标
  • @shanakor 在这里发布问题之前您尝试过吗?

标签: ios swift uiview autolayout autoresizingmask


【解决方案1】:

那么系统如何确定放置的方式和位置 我的真棒表视图。它会简单地匹配父视图的大小吗?


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

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

注意,如果子视图框架未确定,则默认宽高为0。


translatesAutoresizingMaskIntoConstraints 必须做什么 有这个吗?


改编自translatesAutoresizingMaskIntoConstraints 文档:

一个布尔值,用于确定视图的自动调整掩码是否 被翻译成 Auto Layout 约束。

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

注意:

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

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

myView.translatesAutoresizingMaskIntoConstraints = false

表示“我将自己处理视图的约束”,否则不会激活添加的约束。

此外,您可能需要检查:

【讨论】:

  • 非常感谢您的回答。完美。
【解决方案2】:

默认每个UIView的frame都是CGRect.zero

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

Read more about the autoresizingMask property here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多