用于纵向和横向ipad的差异UI

时间:2015-02-16 02:35:10

标签: ios objective-c ipad screen-orientation

我想创建一个这样的应用程序: enter image description here

在iphone(包括肖像和风景)和ipad肖像上,我有一个桌面视图屏幕,点击项目行将导航到另一个细节屏幕看起来像其他基本应用程序。
但是当我在ipad上旋转屏幕转到横向时,屏幕现在有两个剖面视图
这是我做的:

  • 编写方法isInLandscapeTablet以检测ipad格局
  • 使用UINavigationController作为根控制器来控制所有其他观看次数
  • 在纵向屏幕中,将包含tableview的viewcontroller推送到根控制器
  • 在横向平板电脑屏幕中,将tableview控制器和详细控制器附加到UISplitViewController,然后将其推入根控制器

但问题是我无法将UISplitViewController推送到根控制器,因为它需要是一个根控制器。
我想知道如何处理这个问题 我的方法是否正确?还有其他办法吗?

更新:我像这样更改根视图控制器

  // this snippet is in UINavigationController (I use as root viewcontroller) 
        if([self isInTabletLandscape]){
             self.splitViewController.viewControllers = [NSArray arrayWithObjects:[[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil], self.propertyLandViewController, nil];
            [[UIApplication sharedApplication].keyWindow setRootViewController:self.splitViewController];
        }else{
 // it doesn't work
            [[UIApplication sharedApplication].keyWindow setRootViewController:self];
            }
        }

4 个答案:

答案 0 :(得分:2)

了解设备后是iPad还是iPhone。您可以尝试删除Root View Controller。

       appDelegate.window.rootViewController = nil;

然后使用新的SplitViewController

设置根视图控制器
        id objClass =[[SplitViewController alloc]initWithNibName:@"SplitViewController" bundle:nil];
        masterVC.delegate = detailVC;
        detailVC.delegate = objClass;
        [objClass setViewControllers:@[masterNavigate,detailNavigate]];

        [appDelegate.window setRootViewController:objClass];

答案 1 :(得分:1)

如果您在iOS 8上进行开发,则应使用Size Classes,这样您就可以完全根据iPhone / iPad纵向和iPad横向更改布局。不幸的是,在iOS 7上,尺寸等级仅区分iPhone和iPad。

在这两种情况下,右侧部分(2)都可以使用containerView轻松处理。

答案 2 :(得分:1)

我的建议是根本不使用Split View Controller。创建一个自定义视图控制器,它将嵌入您的表视图控制器和第二个控制器。此外,您可以在您创建的自定义控制器中实现接口 - 旋转逻辑。

答案 3 :(得分:1)

https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/SplitViewControllers.html

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   MyFirstViewController* firstVC = [[MyFirstViewController alloc] init];
   MySecondViewController* secondVC = [[MySecondViewController alloc] init];

if ( ([[UIDevice currentDevice] orientation] ==  UIDeviceOrientationPortrait)  ){

   UISplitViewController* splitVC = [[UISplitViewController alloc] init];
   splitVC.viewControllers = [NSArray arrayWithObjects:firstVC, secondVC, nil];

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    window.rootViewController = splitVC;
   [window makeKeyAndVisible];
 }
    else
{
// Display tableview

}
 return YES;
 }


我认为这可能对你有帮助..