内在大小与系统宽度/高度约束的区别是什么?

Cen*_*ion 16 objective-c ios autolayout

开始从弹簧和结构布局移动到自动布局,并对"内在尺寸"设置有一些疑问.

如果你设置一些以"占位符"的"固有大小",并把一些宽度和高度值,那么该观点不能扩展,并会留在固定大小的.但是如果我们将"内部大小"设置为"默认(系统定义)",那么系统将在运行时根据需要决定和缩放视图.

但是,我们可以使用Ctrl + Drag为视图显式设置宽度和高度系统约束.在这种情况下,将存在系统宽度和高度约束以及const占位符值.我正在审查现有代码,并试图理解它是一个错误,应该删除冗余系统宽度和高度约束或还有一些其他隐藏的逻辑.但是,Xcode在运行时不会在控制台中显示任何警告等.这是演示项目的打印屏幕:

在此输入图像描述

Leo*_*ica 31

当您将内在大小设置为"占位符"时,您告诉Xcode布局系统您的视图的大小取决于其内容(如标签可能取决于其文本内容).系统仅知道并维护其自身类型的具有内在大小的视图.如果您希望在自己的视图中获得类似的体验,请将视图视为具有内在大小.然后设置约束,就好像视图应该根据其内容增长或缩小一样.最后,实现该intrinsicContentSize方法以计算并返回正确的内容大小.如果内容发生变化并且应该执行新计算,则请致电invalidateIntrinsicContentSize在你的观点.根据您设置约束的方式,您的视图将增长和/或缩小,或者它将是静态的(就像您可以在标签上设置宽度和高度约束,并且它保持静态).