当方向发生变化并且 View Controller 随后收到更改通知时,整个 Root View 及其所有 subview 是否都会收到这些通知?我创建了一个 Root View 和该 Root View 的 subview 。 subview 的 Controller (以及此层次结构中 subview 的任何 Controller )是否接收因设备方向更改而导致的所有旋转处理?
我问这个问题是因为嵌套在这个层次结构中的是 UISplitViewController 的 View ,并且我怀疑它没有收到设备方向更改的通知。也就是说,我的 View 层次结构中基本上有类似 A -> B -> C 的内容,其中 C 是 UISplitViewController 的 View 。
最佳答案
当方向发生变化时,只有窗口的第一个 View 将与其整个层次结构一起旋转。 就 viewController 而言,第一个 View 的 viewController 将获取方向更改事件(以及 viewWill/DidAppear 事件)以及由它生成的所有 viewController。我所说的生成是指使用 uitabbarViewController 的选项卡显示的 View Controller ,或者添加到导航 Controller ,或者以模态方式显示的 View Controller 。 换句话说,如果您在层次结构中的某个位置手动将 View Controller 的 View 添加到窗口或另一个 View ,则该 View Controller 将不会收到任何事件。
请参阅:why does viewDidAppear not get triggered? 方向改变也会发生同样的情况
所以有两个可能的原因:
- 您的 uisplitviewController 的 View 或其任何父 View 被手动添加到 View 层次结构中,而不是推送 View Controller ( View 旋转但不接收事件)
- 您将 View 添加为窗口的第二个子窗口( View 根本不会旋转)
关于ios - 查看 Controller 层次结构和设备方向变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345576/