gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:06:33 27 4
gpt4 key购买 nike

我读过 documentation .但是我仍然不确定什么时候不需要将它设置为 false。在下面的代码中,如果我将它设置为 false,我将根本看不到 header 。如果我将其保留为 true,那么一切都很好。

View debug hierarchy 中的以下内容会给出警告“width and position are ambiguous”。

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

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

但是,如果您只需要保留系统提供给您的内容,在本例中就是管理其位置和宽度的 tableView,则保留为 true

是这样吗?

最佳答案

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

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

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

viewForHeaderInSection 返回标题 View 后,它被添加到 TableView 中,其 frame 是根据 TableView 的当前宽度和您设置的高度设置的从 heightForHeaderInSection 返回。

您可以将 subview 添加到根标题 View (代码中的 header)并使用约束来相对于标题 View 布局这些 subview 。

您已经在您的评论中发现了为什么您不能对标题 View 本身使用自动布局的原因;在您创建 View 时,它还不是 View 层次结构的一部分,因此您不能将其边缘限制为任何东西。

为了动态调整标题大小,您需要将 subview 添加到您的header View ,并在这些 subview 和header 之间添加约束。然后,自动布局可以使用 header 的固有内容大小来确定标题 View 大小。

因为您没有约束header 的框架,所以不要将translatesAutoresizingMaskIntoConstraints 设置为false。您需要确保对自动布局的 subview 有足够的约束,以确定 header 的大小。

如果 subview 的固有内容大小不够,您将需要从上到下连续的约束线,并且可能需要对 subview 进行一些高度约束。

您添加到 header 的任何 subview do 都需要将 translatesAutoresizingMaskIntoConstraints 设置为 false

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

关于ios - 什么时候应该将 translatesAutoresizingMaskIntoConstraints 设置为 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47800210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com