前提条件失败:从 iOS 13.4 开始在 SwiftUI 中使用 GeometryReader 时输入索引无效

Posted

技术标签:

【中文标题】前提条件失败:从 iOS 13.4 开始在 SwiftUI 中使用 GeometryReader 时输入索引无效【英文标题】:precondition failure: invalid input index when using GeometryReader in SwiftUI starting with iOS 13.4 【发布时间】:2020-03-26 13:47:52 【问题描述】:

昨天我将 XCode 和我的项目升级到 ios 13.4,我开始在使用 GeometryReaders 的视图周围看到很多故障。

除了“前提条件失败:输入索引无效”之外,该错误没有显示任何内容

【问题讨论】:

遇到了同样的问题。删除父 NavigationView 解决了我的问题(我不需要它),但这可能不是适合所有人的解决方案。 也看到了这个。这个更新让我很生气:( 【参考方案1】:

升级到 13.4.1 后我遇到了完全相同的问题。

我用 13.3.3 安装了一个模拟器,没有问题。

最终导致问题的原因是将 GeometryReader 作为 NavigationView 的内部视图。让 GeometryReader 成为最顶层的视图为我解决了这个问题。

【讨论】:

这个答案可能是一个很好的临时修复,可以重新开始,但如果这确实是问题,这似乎是一个严重的错误。无法(始终)在 NavigationView 中使用 GeometryReader 是一个破坏者!【参考方案2】:

在调试并开始失去理智后,我发现每个具有 GeometryReader 的视图也都在使用 onReceive 并调用具有组合代码的函数。

基本上我是在 Publisher 上调用 .collect() 并将结果下沉到一个变量中。

在我删除了组合代码并开始使用老式数组操作后,一切又开始工作了。

【讨论】:

嗨 Andrei,最新的更新也破坏了我使用 SwiftUI 的 Watch 应用程序。我使用 GeometryReader 来读取屏幕的大小,这样我就可以绘制一个相对于屏幕大小的框架。所以我使用geometry.size.width和geometry.size.height,我得到前置条件失败:无效输入索引:2。我似乎认为它与高度有关,但我不确定是什么问题。 您是否以任何方式使用Combine?我也怀疑geometry.size.height,但在删除所有Combine代码后,它又开始工作了 我看到的问题与@alamodey 完全相同。有没有人设法在示例项目中重现这一点?这似乎根本不是预期的行为 我看到了同样的问题。有什么解决办法吗? @alamodey 我的崩溃只出现在模拟器中。它在设备上运行良好,除了(奇怪的是)使用 VoiceOver 辅助功能运行应用程序时

以上是关于前提条件失败:从 iOS 13.4 开始在 SwiftUI 中使用 GeometryReader 时输入索引无效的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 11.4 和 iOS 13.4 打破了 Project 中的 Objective-C 类别

AES 加密在 iOS 13.4 上无法正常工作

html2canvas 在IOS系统13.4以上失效的问题解决方法

Gmail API 服务帐户请求 - 前提条件检查失败

iOS 13.6 降级 13.4.1 系统,FilzaEscaped 进展

SwiftUI 崩溃:“前提条件失败:属性未能设置初始值:71”