当前位置: 首页 > 面试题库 >

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

贲文景
2023-03-14
问题内容

我已经阅读了文档。但我仍然不确定何时不需要将其设置为false。在下面的代码中,如果将其设置为,false则根本看不到标题。如果我将其保留为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
}

我以为只要需要修改代码中的任何内容,都必须设置translatesAutoresizingMaskIntoConstraintsfalse

如果您需要删除其所有约束,然后将其设置为false,然后添加所需的内容,则可能是更正确的说法,在这种情况下,您需要为所有四个方面添加约束。

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

那正确吗?


问题答案:

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

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

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

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

您可以将子视图添加到根头视图(header在代码中),并使用约束相对于头视图布局这些子视图。

您已经发现了无法在注释中对标题视图本身使用自动布局的原因。在创建视图时,它还不属于视图层次结构,因此您不能将其边缘约束到任何东西。

为了具有动态标头大小,您将需要在视图中添加子视图,header并在这些子视图和之间添加约束header。然后,自动版式可以使用的固有内容大小header来确定标题视图的大小。

由于您不限制的框架header,因此请勿设置translatesAutoresizingMaskIntoConstraintsfalse。您将需要确保子视图上有足够的约束以进行自动布局以确定的大小header

如果子视图的内在内容大小不够,则需要从上到下连续的约束线,并且子视图可能需要一些高度约束。

您添加的所有子视图header 需要translatesAutoresizingMaskIntoConstraints设置为false

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



 类似资料:
  • 我已阅读文档。但我仍然不确定何时不需要将其设置为 。在下面的代码中,如果我将其设置为 ,我根本看不到标头。如果我把它留,那么一切都很好。 以下视图调试层次结构将发出警告“宽度和位置不明确”。 我想每当我需要修改代码中的任何内容时,我都必须将设置为。 也许更正确的说法是,如果您需要删除它的所有约束,然后将其设置为< code>false,然后添加您喜欢的内容,在这种情况下,您需要为所有4条边添加约束

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可

  • 问题内容: 我莫名其妙地迷糊了自己。 不知何故,我想到用AJAX(如$ .post)打PHP时,您必须回显“ true”或“ false”,而不是返回true / false。我现在知道不是这种情况,但是有人可以为我分解吗? 测试布尔值是否存在问题?像这儿 那是有问题的情况,对吗?在这里,我不能返回true / false,而是必须回显一个字符串并测试该字符串,是吗? 但是我看到布尔true /

  • 声明集合不会抑制其任何功能(仍然可以、、、等),但允许编译器进行更多优化。 在什么情况下,最好更改引用(不允许使用final)而不是使用现有集合的方法?