iPhone 6 Plus 上的拆分视图控制器旋转
Posted
技术标签:
【中文标题】iPhone 6 Plus 上的拆分视图控制器旋转【英文标题】:Split view controller rotation on iPhone 6 Plus 【发布时间】:2015-02-06 07:21:52 【问题描述】:我有一个横向模式的拆分视图控制器,带有两个导航控制器。
这会折叠成一个纵向的导航控制器,并且从主控制器推送详细视图控制器。
如果我在将详细视图控制器以纵向推入时旋转回横向,我不明白如何将详细视图控制器放回它自己的导航控制器中。
【问题讨论】:
【参考方案1】:你应该实现 UISplitViewControllerDelegate。最简单的方法可能是拥有自己的 MySplitViewController 类并将自己设置为 viewDidLoad 中的委托:
self.delegate = self;
首先,您可能希望 showDetailViewController 看起来像:
- (BOOL) splitViewController:(UISplitViewController*)splitViewController showDetailViewController:(UIViewController*)vc sender:(id)sender
if (splitViewController.collapsed)
[(UINavigationController*)splitViewController.viewControllers[0]) pushViewController:vc animated:YES];
else
self.viewControllers = @[ self.viewControllers.firstObject, vc ];
return YES;
这应该注意在两个方向上正确显示详细信息视图。
接下来,您应该实现以下类似的委托方法:
- (UIViewController*) splitViewController:(UISplitViewController*)splitViewController
separateSecondaryViewControllerFromPrimaryViewController:(UIViewController*)primaryViewController
UINavigationController* nc = primaryViewController;
UIViewController* detailVC = nc.viewControllers.lastObject;
return detailVC;
这个方法是你从主控制器获取你想要的任何东西并将其作为细节视图控制器返回的机会。上面的示例代码相当简单,您可能需要遍历导航视图控制器并从特定视图控制器开始选择所有内容(假设您从详细视图中推送)。
无论如何,花点时间阅读一下真的会有所收获:UISplitViewController class reference,尤其是UISplitViewControllerDelegate Protocol Reference 这会清楚得多。 如果您想要快捷方式,请查看 Xcode 拆分视图控制器模板项目。该文件还应包含针对您的问题的提示或确切解决方案。
【讨论】:
【参考方案2】:让细节有自己的导航控制器,就像在主细节模板中一样。当拆分视图折叠时,它在主导航控制器上调用showViewController
,当它检测到类UINavigationController
的控制器时,它设置允许嵌套导航控制器为真并隐藏导航栏。这样您就可以保留详细导航,因此当您旋转到横向并分开时,它可以再次使用现有导航。
【讨论】:
以上是关于iPhone 6 Plus 上的拆分视图控制器旋转的主要内容,如果未能解决你的问题,请参考以下文章
在横向屏幕上旋转不是 iPhone 5 和 iPhone 6 上的视图
iPhone 6 Plus 上的 UISplitViewController 旋转大师大师
在 iPhone 6 Plus 上关闭 UISplitViewController 弹出框时 UIWebView 被拉伸
为啥我在 iPhone 6+ 上旋转时导航栏会从拆分视图中消失?