我已经阅读了文档。但我仍然不确定何时不需要将其设置为false。在下面的代码中,如果将其设置为,false则根本看不到标题。如果我将其保留为true,那么一切都很好。
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 }
我以为只要需要修改代码中的任何内容,都必须设置translatesAutoresizingMaskIntoConstraints为false。
translatesAutoresizingMaskIntoConstraints
如果您需要删除其所有约束,然后将其设置为false,然后添加所需的内容,则可能是更正确的说法,在这种情况下,您需要为所有四个方面添加约束。
但是,如果您只需要保留系统为您提供的内容,则在这种情况下,将由tableView管理其位置和宽度,然后保留为true。
那正确吗?
translatesAutoresizingMaskIntoConstraints 在以下情况下需要将其设置为false:
UIView
在这种情况下,并非所有这些都是正确的。具体来说,是第2点。
从标题视图返回后,标题视图viewForHeaderInSection将添加到表格视图,并frame根据表格视图的当前宽度和您从中返回的高度进行设置heightForHeaderInSection。
viewForHeaderInSection
frame
heightForHeaderInSection
您可以将子视图添加到根头视图(header在代码中),并使用约束相对于头视图布局这些子视图。
header
您已经发现了无法在注释中对标题视图本身使用自动布局的原因。在创建视图时,它还不属于视图层次结构,因此您不能将其边缘约束到任何东西。
为了具有动态标头大小,您将需要在视图中添加子视图,header并在这些子视图和之间添加约束header。然后,自动版式可以使用的固有内容大小header来确定标题视图的大小。
由于您不限制的框架header,因此请勿设置translatesAutoresizingMaskIntoConstraints为false。您将需要确保子视图上有足够的约束以进行自动布局以确定的大小header。
如果子视图的内在内容大小不够,则需要从上到下连续的约束线,并且子视图可能需要一些高度约束。
您添加的所有子视图header 都 需要translatesAutoresizingMaskIntoConstraints设置为false
您还需要返回 的东西 从estimatedHeightForHeaderInSection-越接近实际的标题高度的更好- 如果你正在使用tableview.sectionHeaderHeight = UITableViewAutomaticDimension
estimatedHeightForHeaderInSection
tableview.sectionHeaderHeight = UITableViewAutomaticDimension