8

我正在做几个项目,它发生了同样的错误。

我仍然无法弄清楚是什么原因造成的。是我的代码问题还是 Xcode 9 beta 问题?

MyApp[22724:4000717] API 错误:(null)返回 0 宽度,假设 UIViewNoIntrinsicMetric

4

1 回答 1

4

@rmaddy 正确链接到另一个 SO 答案,但是还有其他与自动布局实践相关的可能性。

该消息还可能与项目中定义的自动布局实现和唯一约束有关。使用真实设备时似乎通常不会出现此消息。

UIKit 框架 -> UIView API 全局变量 UIViewNoIntrinsicMetric

UIViewNoIntrinsicMetric给定数字视图属性缺少内在指标。

UIView 实现实践

每个 UIView 子类都应该实现intrinsicContentSize并返回它认为适合它的大小。例如:

  • 如果您知道您使用的 UIView 的宽度,则返回 CGSizeMake(200, 50)。
  • 如果您不知道视图UIViewNoIntrinsicMetric的宽度,您可以使用宽度来代替。return CGSizeMake(UIViewNoIntrinsicMetric, 50)

UIView 的基本实现updateConstraints将调用intrinsicContentSize,它将使用从它返回的内容大小来向UIView 添加约束。

UIView API 属性 intrinsicContentSize

intrinsicContentSize接收视图的自然大小,仅考虑视图本身的属性。

自定义视图通常会显示布局系统不知道的内容。设置此属性允许自定义视图与布局系统通信,它希望基于其内容的大小。这个固有尺寸必须独立于内容框架,因为例如,无法根据改变的高度动态地将改变的宽度传达给布局系统。如果自定义视图没有给定维度的固有大小,则它可以 UIViewNoIntrinsicMetric用于该维度。

结论

Xcode 错误:

返回 0 宽度,假设 UIViewNoIntrinsicMetric

因此,我们可以知道 Xcode 假设UIViewNoIntrinsicMetric大小,因为项目中的某些 UIView 返回宽度大小为 0。

如果您在真实设备上部署时仍然收到消息,那么我会特别注意您的布局限制。

于 2017-08-17T20:53:14.637 回答