17

开始从弹簧和结构布局转向自动布局,并对“固有尺寸”设置有一些疑问。

如果您将某些视图的“固有大小”设置为“占位符”并放置一些宽度和高度值,则视图将不会缩放并保持固定大小。但是如果我们将“固有大小”设置为“默认(系统定义)”,那么系统将在运行时根据需要决定并缩放视图。

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

在此处输入图像描述

4

4 回答 4

34

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

于 2013-10-30T08:45:10.680 回答
4

如果您熟悉wrap_contentandroid ,intrinsicContentSize则与 wrap_content 相同。

于 2016-06-17T12:19:41.530 回答
1

每个包含内容的视图都可以计算其内在内容大小。内在内容大小由每个 UIView 实例上的方法计算。此方法返回一个 CGSize 实例

于 2017-11-02T09:54:32.403 回答
0

当Intrinsic size设置为Placeholder时,containerView根据自己的subView(containeeView)计算自己的高度

containerView 根据里面的内容增长或缩小。

- 设置视图的宽度和位置,而不是高度 - 设置 view.intrinsicSize = 占位符 - 在视图内放置标签 - 将标签贴到视图的所有边框 - 不要为标签设置高度(或使用 >= 运算符设置高度。不 =运算符) - 将标签设置为 lines=0, lineBreak=WordWrap

根据内容大小,标签的高度会增加或缩小。视图将根据标签高度增加或缩小高度。

于 2018-03-22T09:24:48.390 回答