纵向和横向的差异 UI ipad
Difference UI for portrait and landscape ipad
我想创建一个这样的应用程序:
在 iphone(纵向和横向)和 ipad 纵向上,我有一个 table 查看屏幕,点击项目行将导航到另一个详细信息屏幕,看起来像其他基本屏幕应用。
但是当我在 ipad 上旋转屏幕转到横向时,屏幕现在有两个剖面视图
这是我所做的:
- 写一个方法
isInLandscapeTablet
检测ipad风景
- 使用
UINavigationController
作为根控制器来控制所有其他视图
- 在纵向屏幕中,将 viewcontroller 包含 table 视图推送到根控制器
- 在横向 tablet 屏幕中,将 table 视图控制器和细节控制器附加到
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];
}
}
如果您在 iOS 8 上开发,您应该使用 Size Classes,这样您就可以完全根据 iPhone/iPad 纵向和 iPad 横向更改布局。不幸的是,在 iOS 7 上,尺寸 类 只能区分 iPhone 和 iPad。
在这两种情况下,正确的部分 (2) 都可以使用 containerView 轻松处理。
知道设备是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];
我的建议是完全不要使用 Split View Controller。创建一个自定义视图控制器,它将嵌入您的 table 视图控制器和第二个控制器。此外,您可以在您创建的自定义控制器中实现界面旋转逻辑。
- (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;
}
我想这可能对你有帮助..
我想创建一个这样的应用程序:
在 iphone(纵向和横向)和 ipad 纵向上,我有一个 table 查看屏幕,点击项目行将导航到另一个详细信息屏幕,看起来像其他基本屏幕应用。
但是当我在 ipad 上旋转屏幕转到横向时,屏幕现在有两个剖面视图
这是我所做的:
- 写一个方法
isInLandscapeTablet
检测ipad风景 - 使用
UINavigationController
作为根控制器来控制所有其他视图 - 在纵向屏幕中,将 viewcontroller 包含 table 视图推送到根控制器
- 在横向 tablet 屏幕中,将 table 视图控制器和细节控制器附加到
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];
}
}
如果您在 iOS 8 上开发,您应该使用 Size Classes,这样您就可以完全根据 iPhone/iPad 纵向和 iPad 横向更改布局。不幸的是,在 iOS 7 上,尺寸 类 只能区分 iPhone 和 iPad。
在这两种情况下,正确的部分 (2) 都可以使用 containerView 轻松处理。
知道设备是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];
我的建议是完全不要使用 Split View Controller。创建一个自定义视图控制器,它将嵌入您的 table 视图控制器和第二个控制器。此外,您可以在您创建的自定义控制器中实现界面旋转逻辑。
- (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;
}
我想这可能对你有帮助..