投票者:如果您也遇到了这个问题,可以告诉我吗?
当我尝试从特定场景上的按钮以模式方式启动 View Controller 时,我看到的问题大约每 15 次发生一次。
这是在 iOS 9.2.1 和 XCode 7.2 上完成的,但不清楚它发生在哪个版本上。 iOS 版本下调并不容易。
症状如下:
- 目标 View Controller 在手机上不可见。相反,顶部栏(带有载体的栏)变黑,有时会闪烁,因此整个屏幕完全变黑。启动 View Controller 可见,但没有响应。
- 发生这种情况时,我转到 XCode 屏幕并进行 View 调试。值得注意的是,这显示了目的地屏幕,几乎与预期的一样。唯一的区别是其中一个 View 没有完成它的 drawRect,而其他 View 之一看起来全是 Blob 。但当然,它与手机显示的内容完全不符。
- 目标屏幕上的取消按钮似乎仍然有效,因为当我按下它应该在的位置时,应用程序会继续运行。如果我尝试使用按钮重新启动屏幕,它再次不起作用。因此,一旦发生这种情况,该 session 的屏幕就会停止工作,并且需要终止并重新启动该应用。
提示不多,但这些信息可能会有所帮助:
- 目标屏幕上有 3 个包含 View 的 ScrollView 。所有三个 subview 都有自己的 drawRect。事实证明,发生错误时未调用其中一个 drawRects,导致显示灰色背景。有 Blob 的 View 确实运行了,但我不知道为什么它在 View 调试中看起来像那样。
- XCode 中没有警告。与 NSLayout 约束或演示文稿重叠无关。
- 在 prepareForSegue 函数的目标 View Controller 上设置了两个字段。
- segue 通过 Storyboard从时间按钮启动。没有丢失或额外的导出,并且它被正确命名以供准备功能捕获它。
这个问题是偶发的,但如果您连续多次启动/取消,就会可靠地发生。
这是屏幕截图。我不会给你看黑屏。它只是带有载体和时间的黑色。
最佳答案
我已经解决了。结果证明,检查内存使用情况非常有用。
灰色区域应该由画有线条的大背景填充。事实证明,drawBackground 的简单实现导致内存大小膨胀到超过 200MB。我用 CSTiledLayer 替换了它,现在它占用了几 MB。
关于ios - 在 iOS 9.2.1/XCode 7.2 中执行 segue 时偶尔出现黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35087482/