在Xcode 6中,我构建了一个具有UISplitViewController的通用应用程序。在iOS 8设备很小的情况下,它看起来像一个普通的主/细节关系,但在较大的设备上,您可以同时看到主视图和详细视图。UISplitViewController iOS 7向后兼容性
这非常适用于iOS 8的,但我也需要它来支持的iOS 7,iOS的7支持UISplitViewController只为台iPad,而我现在有它同时用于iPad和iPhone。
我该如何解决这个问题?
在Xcode 6中,我构建了一个具有UISplitViewController的通用应用程序。在iOS 8设备很小的情况下,它看起来像一个普通的主/细节关系,但在较大的设备上,您可以同时看到主视图和详细视图。UISplitViewController iOS 7向后兼容性
这非常适用于iOS 8的,但我也需要它来支持的iOS 7,iOS的7支持UISplitViewController只为台iPad,而我现在有它同时用于iPad和iPhone。
我该如何解决这个问题?
其实,我发现UISplitViewController适用于运行iOS 7,以及如果你建立一个使用SDK 8(6的Xcode)的iPhone;默认实例项目可以用下面的警告运行:
主和细节视图控制器直接由拆分视图控制器控制。
视图控制器的阵列包含的直接引用,只有主视图控制器;详细视图控制器不在那里。
由于上述的直接后果,你不能显示你的主人和细节视图控制器内的工具栏,因为那些使用导航控制器来控制。
如果不实施任何的新的分割视图委托协议方法,可能会看到注意到细节视图控制器被示出在纵向模式; this question有问题的答案。
顺便说一句,从我的短实验我发现对于不论是iOS 7和8个中的自动布局导板位于细节视图有点靠不住;顶部或底部布局指南的路线必须分别调整为-64和-44。
测试以上iPhone 4S的iOS上7.1.2
嗯,我正在使用Xcode6.1,SDK 8.1,iPhone 4s模拟器7.1。温家宝我做的, 'UISplitViewController *分= [[UISplitViewController的alloc]初始化]' 我得到 'UISplitViewController仅支持UIUserInterfaceIdiomPad' 任何建议下运行时? – mackworth 2014-10-28 20:19:33
@mackworth我认为他们只在使用接口构建器时才使它兼容:) – 2014-10-28 22:06:22
Aha;这解释了它。谢谢! – mackworth 2014-10-29 01:15:29
@macworth杰克说,这是可能的,但我不知道您是否可以从代码做到这一点。不过,我还遇到了一个问题(使用故事板时,只能在UIUserInterfaceIdiomPad下运行时才能支持)。经过多次磨牙之后,我发现这是因为我使用的是旧的xcode导入项目,并且没有为故事板启用使用尺寸类复选框。启用后,xcode升级了该项目,并且它工作正常。
我也不得不做出一些调整来处理情况,导航控制器是用来代替一个拆分视图控制器的情况。特别是,在默认的Xcode拆分视图控制器项目,我不得不作出以下的#if 1了改变prepareForSeque():
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSDate *object = self.objects[indexPath.row];
#if 1
DetailViewController *controller = nil;
if ([segue.destinationViewController isKindOfClass:[UINavigationController class]]) {
controller = (DetailViewController*)[segue.destinationViewController topViewController];
}
else if ([controller isKindOfClass:[UISplitViewController class]]) {
controller = segue.destinationViewController;
}
#else
DetailViewController *controller = (DetailViewController*)[[segue destinationViewController] topViewController];
#endif
[controller setDetailItem:object];
controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
controller.navigationItem.leftItemsSupplementBackButton = YES;
}
}
我有同样的问题。在您的UISplitViewController委托添加参照旧的委托方法
///
/// Used by iOS 7 iPad
///
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
}
这样做,使得它,这样在iOS 7 iPad的它显示在同一时间像它在iOS的8
我师傅和细节我不确定你要求的是什么...'[[UIDevice currentDevice] systemVersion]'听起来太简单了。 :) – 2014-09-27 13:50:29
@PhillipMills所以在AppDelegate中,我将不得不根据版本在两个故事板之间切换? – erdekhayser 2014-09-27 13:57:45