这不是部分 UIWebView 的错误。
发生的事情是,Apple 最终对维护应用程序的视图层次结构的方式变得更加严格。在 iOS 5.x 之前,开发人员能够从一个层次结构中删除视图并将其添加到另一个层次结构中。一个完美的例子就是应用程序的主视图层次结构;当呈现一个模态视图控制器时,这个模态视图控制器有它自己的视图层次结构,它不是应用程序视图层次结构的一部分;因此,如果模态视图控制器有一个子视图,并且在该视图中它说的是一个电影(恰好也是一个视图)并且该电影将被最大化,则该电影的视图将从模态视图控制器的层次结构中删除,并且添加到应用程序的视图层次结构...
application modal view controller
| |
| |
window view
| |
| |
|---------------- ------------------
| | | |
| | | |
subview 1 subview 2 subview 3 movie
可以看出,模态视图控制器的视图层次结构位于应用程序的视图层次结构之外,这在 iOS 5.x 之前不是问题,因为当呈现模态视图控制器并最大化影片时,Apple 所做的是下列的:
application modal view controller
| |
| |
window view
| |
| |
|------------------------- ------------
| | | |
| | | |
movie subview 1 subview 2 subview 3
电影出现在所有其他视图之上。在 iOS 5.x+ 中不再是这种情况,这样做是错误的,您将看到之前遇到的错误。
为了解决这个问题,您需要通过不将视图控制器呈现为模态视图控制器,将模态视图控制器的视图放入应用程序的视图层次结构中,然后将视图控制器的视图添加到应用程序的层次结构中,如下所示:
application
|
|
modal view controller window
| |
| |
---------------------------------------------------------------
| | |
| | |
view subview 1 subview 2
|
|
-------------------
| |
| |
subview 3 movie
从现在开始,每个人都需要从一开始就真正考虑如何正确构建视图层次结构以及它们如何相互交互,以及这些大型项目中未来的可扩展性。
Apple 在 2011 年的 WWDC 中详细记录了这个问题。它在第 102 节中讨论。