"API error: (null) returned 0 width, assuming UIViewNoIntrinsicMetric" in Xcode 9 beta

"API error: (null) returned 0 width, assuming UIViewNoIntrinsicMetric" in Xcode 9 beta

我正在处理几个项目,但都发生了同样的错误。

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

MyApp[22724:4000717] API error: (null) returned 0 width, assuming UIViewNoIntrinsicMetric

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

该消息也可能与您的项目中定义的自动布局实现和唯一约束有关。使用真机好像一般不会出现这个提示

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

UIViewNoIntrinsicMetric 给定数值视图缺少固有指标 属性。

UIView实现实践

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

  • 如果您知道 UIView 的宽度,您可以使用 return CGSizeMake(200, 50)。
  • 如果您不知道视图的宽度,您可以使用 UIViewNoIntrinsicMetric 而不是宽度。 return CGSizeMake(UIViewNoIntrinsicMetric, 50)

updateConstraints 的 UIView 基本实现将调用 intrinsicContentSize 并将使用从中获取的内容大小 return 来向 UIView 添加约束。

UIView API 属性 intrinsicContentSize

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

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

结论

Xcode 错误:

returned 0 width, assuming UIViewNoIntrinsicMetric

因此我们可以认为 Xcode 假设 UIViewNoIntrinsicMetric 大小,因为 0 的宽度大小是由您的某些 UIView return 编辑的项目。

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