簡體   English   中英

縱向和橫向iPad的差異UI

[英]Difference UI for portrait and landscape ipad

我想創建一個這樣的應用程序: 在此處輸入圖片說明

在iPhone(縱向和橫向)和iPad縱向上,我都有一個表格視圖屏幕,點擊項目行將導航到另一個詳細信息屏幕,就像其他基本應用程序一樣。
但是,當我旋轉屏幕以在ipad上橫向移動時,屏幕現在具有兩個剖面圖
這是我所做的:

  • 編寫isInLandscapeTablet方法來檢測iPad橫向
  • 使用UINavigationController作為根控制器來控制所有其他視圖
  • 在縱向屏幕中,將包含tableview的viewcontroller推送到根控制器
  • 在橫向平板電腦屏幕中,將tableview控制器和detail控制器附加到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];
            }
        }

知道設備是iPad還是iPhone后。 您可以嘗試刪除RootViewController。

       appDelegate.window.rootViewController = nil;

然后使用新的SplitViewContloller設置根視圖控制器

        id objClass =[[SplitViewController alloc]initWithNibName:@"SplitViewController" bundle:nil];
        masterVC.delegate = detailVC;
        detailVC.delegate = objClass;
        [objClass setViewControllers:@[masterNavigate,detailNavigate]];

        [appDelegate.window setRootViewController:objClass];

如果您是在iOS 8上進行開發,則應使用Size Classes ,以便可以完全根據iPhone / iPad portrait和iPad Landscape更改布局。 不幸的是,在iOS 7上,尺寸類別只能區分iPhone和iPad。

在這兩種情況下,正確的部分(2)都可以使用containerView輕松處理。

我的建議是根本不要使用Split View Controller。 創建一個自定義視圖控制器,它將嵌入您的表視圖控制器和第二個控制器。 另外,您可以在創建的自定義控制器中實現接口旋轉邏輯。

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


我認為這可能對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM