什么时候应该将translatesAutoresizingMaskIntoConstraints设置为true?

Hon*_*ney 31 uitableview ios autolayout nslayoutconstraint swift

我已经阅读了文档.但是我还不确定什么时候不需要设置它false.在下面的代码中,如果我将其设置为falseI,则根本不会看到标题.如果我把它留下来true,那么一切都会好的.

在View调试层次结构中,它将发出警告" 宽度位置不明确".

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let header = UIView()
    header.translatesAutoresizingMaskIntoConstraints = false
    header.backgroundColor = .orange
    header.heightAnchor.constraint(equalToConstant: 10).isActive = true

    return header
}
Run Code Online (Sandbox Code Playgroud)

我想,每当我需要修改代码中的任何东西,我将不得不设置translatesAutoresizingMaskIntoConstraintsfalse.

也许更正确的说法是你需要删除所有约束然后将其设置为false然后添加你喜欢的东西,在这种情况下你需要为所有4个边添加约束.

但是,如果您需要保留系统提供给您的内容,在这种情况下,tableView将管理其位置和宽度,然后离开true.

是对的吗?

Pau*_*w11 46

translatesAutoresizingMaskIntoConstraints 在以下情况下需要设置为false:

  1. UIView在代码中创建一个基于对象(如果文件启用了autolayout,Storyboard/NIB将为您设置),
  2. 并且您希望为此视图使用自动布局而不是基于帧的布局,
  3. 和视图将被添加到一个视图层次使用自动布局.

在这种情况下,并非所有这些都是真的.具体来说,第2点.

返回后,标题视图viewForHeaderInSection将添加到表视图中,并frame根据表视图的当前宽度和返回的高度进行设置heightForHeaderInSection.

您可以将子视图添加到根标题视图(header在代码中),并使用约束来布置相对于标题视图的子视图.

您已经在评论中发现了无法在标题视图中使用autolayout的原因; 在创建视图时,它还不是视图层次结构的一部分,因此您不能将其边缘约束到任何东西.

为了获得动态页眉大小调整,您需要将子视图添加到header视图中,并在这些子视图之间添加约束header.然后,自动布局可以使用内在内容大小header来确定标题视图大小.

由于您没有约束框架header,请不要设置translatesAutoresizingMaskIntoConstraintsfalse.您需要确保对自动布局的子视图有足够的约束以确定其大小header.

如果子视图的内在内容大小不足,则需要从上到下的连续约束线以及子视图的一些高度约束.

您添加的任何子视图header 需要translatesAutoresizingMaskIntoConstraints设置为false

您还需要返回的东西estimatedHeightForHeaderInSection-越接近实际的标题高度的更好-如果你正在使用tableview.sectionHeaderHeight = UITableViewAutomaticDimension

  • 我现在看到的方式是:使用翻译约束将标题从所有 4 个边约束到其超级视图。如果我将标题本身的 `translatesAutoResizingMaskIntoConstraints` 设置为 `false`,所有这些都将被删除。但我需要它们,所以我必须保持“真实”。*然后*我为其子视图添加了更多约束。对于这些子视图,它们都需要将 `translatesAutoResizingMaskIntoConstraints` 设置为 `false`,它们添加到标题中的任何约束都不会与翻译后的约束发生冲突...... (2认同)

PAN*_*RMA 21

  • 对于以编程方式创建的视图,默认值为true,对于Interface Builder的视图,默认值为false

    如果属性为(或设置为)True,则系统会根据视图的框架及其自动调整遮罩自动创建一组约束.如果添加自己的约束,它们不可避免地会与自动生成的约束发生冲突.这会产生不可满足的布局.因此,在以编程方式实例化视图时,请务必将其translatesAutoresizingMaskIntoConstraints属性设置为NO.

  • “以编程方式实例化视图时,请务必将其translatesAutoresizingMaskIntoConstraints 属性设置为NO” - 实际上,并非总是如此,但仅当您想创建自己的约束来处理自动布局时。如果您更喜欢处理框架,那么您不应该将此值设置为“false”:) (3认同)

归档时间:

查看次数:

15451 次

最近记录:

6 年,6 月 前