【问题标题】:"API error: (null) returned 0 width, assuming UIViewNoIntrinsicMetric" in Xcode 9 betaXcode 9 beta 中的“API 错误:(null)返回 0 宽度,假设 UIViewNoIntrinsicMetric”
【发布时间】:2017-12-28 15:15:44
【问题描述】:

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

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

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

【问题讨论】:

标签: xcode xcode9-beta xcode9


【解决方案1】:

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

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

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

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

UIView 实现实践

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

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

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

UIView API 属性 intrinsicContentSize

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

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

结论

Xcode 错误:

返回 0 宽度,假设 UIViewNoIntrinsicMetric

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

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

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2020-04-11
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多