【问题标题】:view controller hierarchy and device orientation changes查看控制器层次结构和设备方向更改
【发布时间】:2011-03-17 21:37:02
【问题描述】:
当方向发生变化并且视图控制器随后收到更改通知时,整个根视图及其所有子视图是否都会收到这些通知?我已经为该根视图创建了一个根视图和一个子视图。子视图的控制器(以及此层次结构中的任何子视图的控制器)是否接收所有由设备方向更改产生的旋转处理?
我问是因为嵌套在这个层次结构中的是 UISplitViewController 的视图,我怀疑它没有收到设备方向更改的通知。即,我的视图层次结构中基本上有 A -> B -> C 之类的东西,其中 C 是 UISplitViewController 的视图。
【问题讨论】:
标签:
ios
view
controller
uisplitviewcontroller
【解决方案1】:
当方向发生变化时,只有窗口的第一个视图会连同其整个层次结构一起旋转。
就 viewControllers 而言,第一个 view 的 viewController 将获得方向更改事件(以及 viewWill/DidAppear 事件)以及由此产生的所有 viewControllers。通过 spawn,我的意思是使用 uitabbarViewController 的选项卡显示的视图控制器,或者添加到导航控制器,或者以模态方式显示。
换句话说,如果您在层次结构中的某个位置手动将视图控制器的视图添加到窗口或其他视图,则该视图控制器将不会收到任何事件。
看到这个:why does viewDidAppear not get triggered?
方向变化也会发生同样的事情
所以有两种可能的原因:
- 您的 uisplitviewController 的视图或其任何父视图被手动添加到视图层次结构中,而不是推送视图控制器(视图被旋转但不接收事件)
- 您将视图添加为窗口的第二个子窗口(视图根本不会旋转)