在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