2014-09-26 90 views
2

在Xcode 6中,我構建了一個具有UISplitViewController的通用應用程序。在iOS 8設備很小的情況下,它看起來像一個普通的主/細節關係,但在較大的設備上,您可以同時看到主視圖和詳細視圖。UISplitViewController iOS 7向後兼容性

這非常適用於iOS 8的,但我也需要它來支持的iOS 7,iOS的7支持UISplitViewController只爲臺iPad,而我現在有它同時用於iPad和iPhone。

我該如何解決這個問題?

+0

我師傅和細節我不確定你要求的是什麼...'[[UIDevice currentDevice] systemVersion]'聽起來太簡單了。 :) – 2014-09-27 13:50:29

+0

@PhillipMills所以在AppDelegate中,我將不得不根據版本在兩個故事板之間切換? – erdekhayser 2014-09-27 13:57:45

回答

0

其實,我發現UISplitViewController適用於運行iOS 7,以及如果你建立一個使用SDK 8(6的Xcode)的iPhone;默認實例項目可以用下面的警告運行:

  • 主和細節視圖控制器直接由拆分視圖控制器控制。

  • 視圖控制器的陣列包含的直接引用,只有主視圖控制器;詳細視圖控制器不在那裏。

  • 由於上述的直接後果,你不能顯示你的主人和細節視圖控制器內的工具欄,因爲那些使用導航控制器來控制。

  • 如果不實施任何的新的分割視圖委託協議方法,可能會看到注意到細節視圖控制器被示出在縱向模式; this question有問題的答案。

順便說一句,從我的短實驗我發現對於不論是iOS 7和8箇中的自動佈局導板位於細節視圖有點靠不住;頂部或底部佈局指南的路線必須分別調整爲-64和-44。

測試以上iPhone 4S的iOS上7.1.2

+0

嗯,我正在使用Xcode6.1,SDK 8.1,iPhone 4s模擬器7.1。溫家寶我做的, 'UISplitViewController *分= [[UISplitViewController的alloc]初始化]' 我得到 'UISplitViewController僅支持UIUserInterfaceIdiomPad' 任何建議下運行時? – mackworth 2014-10-28 20:19:33

+1

@mackworth我認爲他們只在使用接口構建器時才使它兼容:) – 2014-10-28 22:06:22

+0

Aha;這解釋了它。謝謝! – mackworth 2014-10-29 01:15:29

1

@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; 
    } 
} 
0

我有同樣的問題。在您的UISplitViewController委託添加參照舊的委託方法

/// 
/// Used by iOS 7 iPad 
/// 
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation 
{ 
    return NO; 
} 

這樣做,使得它,這樣在iOS 7 iPad的它顯示在同一時間像它在iOS的8