当我使用自动布局& xib要创建一个uitableviewcell,为什么我要将translatesAutoresizingMaskIntoConstraints设置为YES?

时间:2014-11-25 05:27:57

标签: ios uitableview autolayout

在我看来,如果

translatesAutoresizingMaskIntoConstraints = YES

布局系统将根据当前xib文件大小(如宽度和高度)生成一些隐式约束,这些约束不适用于动态高度单元格(例如,单元格中有多个行标签)。

但是在我的项目中,如果我在translatesAutoresizingMaskIntoConstraints = NO中设置awakeFromXib,则会出现很多布局问题,如果我将translatesAutoresizingMaskIntoConstraints设置为默认值(是)。一切正常。两个宽度都将更改为tableview的宽度,高度将根据多行标签进行调整。我对translatesAutoresizingMaskIntoConstraints的理解是错误的吗?

3 个答案:

答案 0 :(得分:0)

让iOs do its internal stuff并尝试将更改限制为您自己的观看次数,即contentView的子视图。

答案 1 :(得分:0)

如果您在XIB / Storyboard中正确设置了自动布局约束,那么系统本身将为您处理布局大小调整。这就是你设置布尔值的原因。如果您没有设置约束而没有设置bool,那么您负责查看大小和您必须在代码中处理的位置。随着新的外形因素的推出,最好使用适当的布局,让自动布局系统为您处理帧。

答案 2 :(得分:0)

从苹果开发者文件中得到一个规则,也许它对我们来说是完整的

对于了解自动布局的视图,在大多数情况下,您希望translatesAutoresizingMaskIntoConstraints为NO。原因是通过翻译自动调整掩码生成的约束已经足以在给定其超视图的帧的情况下完全指定视图的帧,这通常太多了。例如,此转换将阻止按钮在标题更改时自动采用其最佳宽度。

您不应该调用setTranslatesAutoresizingMaskIntoConstraints的主要情况:当您不是指定视图与其容器的关系的人时。例如,NSTableView放置了一个NSTableRowView实例。它可以通过允许将自动调整掩码转换为约束来实现,或者它可能不会。这是一个私有的实现细节。您不应该调用的其他视图setTranslatesAutoresizingMaskIntoConstraints:包括NSTableCellView对象,NSSplitView的子视图,NSTabViewItem的视图,或NSPopover,NSWindow或NSBox对象的内容视图。对于熟悉经典Cocoa布局的人:如果你不想在经典风格的视图上调用setAutoresizingMask:你不应该在自动布局下调用setTranslatesAutoresizingMaskIntoConstraints: