我有一个运行良好的 SVC 设置。SPC 的主视图和详细视图都是 UINavigationController,每个都有单独的根视图控制器。
我的应用程序运行良好。我可以在纵向或横向模式下启动它,一切正常。“主”弹出按钮在纵向模式下可见,但在横向模式下隐藏。主平面和细节平面都正确设置动画和旋转,没有弹出或奇怪的动画伪影存在,并且一切都正确拉伸。每个规格 100% 的满意度。
当我更换细节视图控制器时出现问题。由于我们无法替换 uinavi 控制器的根节点,所以我要做的是创建一个全新的UINavigationController
,并在详细视图中为其分配我想要的新视图。我这样做是因为详细视图中的视图可以做 1-2-3 级深度,但我需要能够分配唯一的“根”视图(例如,我需要能够完全替换根UINavigationController
)。
代码如下所示:
self.detailViewController = [[SomeNewController1of3 alloc] initWithNibName:@"SomeNewController1of3" bundle:nil];
self.splitViewController.delegate = self.detailViewController;
UINavigationController *newNC = [[UINavigationController alloc] initWithRootViewController:self.detailViewController];
self.splitViewController.viewControllers = @[navigationController, newN];
首先,我创建新的视图控制器,不管它是什么。然后我将 splitviewcontroller 的委托设置为 = 新创建的 viewcontroller (这样willHideViewController
, 等就会触发)。然后我创建一个导航控制器来容纳新创建的视图控制器,以便它可以从中推送和弹出。最后,我用我的新导航控制器替换了拆分视图控制器的第二个(详细)视图。
同样,当我从风景开始时,这个计划完美无缺。
当我从纵向开始时,这些是我注意到的异常情况:
- 所有弹出窗口(警报框、主视图等)都有奇怪的旋转,并且在显示时会从尴尬的位置弹出。几乎就像它在显示这些弹出窗口时旋转它们一样,而不是让它们简单地“滑出”正确的位置。
- 当显示主视图时,在进行了上述奇怪的旋转之后,它会完全消失一瞬间(留下一个黑色的空白区域),然后恢复到原来的位置。
- 在我完成设备旋转之前,不会显示详细视图控制器上显示主视图弹出窗口的“主”按钮。在用断点确认后,我确实得出结论,
willHideViewController
我的上述方法没有调用它。
我不明白为什么当我从横向开始时一切都表现得完美无缺,但所有这些错误都出现在纵向?我所有的视图实际上在 IB 中都有一个默认方向设置为纵向,并且可以缩放以适应。此外,它们不像是疯狂的界面,它们都只是普通的 tableviews。
你们中有人遇到过这个问题或找到解决方法吗?