iPad和iPhone因屏幕尺寸不同,在横竖屏显示上特定界面会存在很大区别
以QZone为例:
在iPhone设备上,默认根控制器为一个Tabbar,子视图是一个TableView,一个上下结构布局
在iPad设备上,默认横屏/竖屏模式下显示左右结构
以此为例进行演示,为了快速演示效果,这里使用storyBoard的方式
- UI搭建:
1.在storyBoard中,放一个Split View Controller作为iPad的根控制器,子视图随便放了两个ViewController,并默认让Split View Controller为initial View Controller
2.另外放置一个TabBarController,作为iPhone的根控制器
Split View Controller已经默认勾选了is initial View Controller
所以为了快速获取到TabBarController,这里给TabBarController设置了一个storyBoard ID
因为需要根据不同设备来选择根控制器,所以来到AppDelegate中进行处理
- AppDelegate设置根控制器
为了提升代码可读性,这里抽取了一个宏,用来判断当前设备是否为iPhone
#define isiPhone ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/*
UIUserInterfaceIdiomUnspecified = -1,
UIUserInterfaceIdiomPhone NS_ENUM_AVAILABLE_IOS(3_2), // iPhone and iPod touch style UI
UIUserInterfaceIdiomPad NS_ENUM_AVAILABLE_IOS(3_2), // iPad style UI
UIUserInterfaceIdiomTV NS_ENUM_AVAILABLE_IOS(9_0), // Apple TV style UI
UIUserInterfaceIdiomCarPlay NS_ENUM_AVAILABLE_IOS(9_0), // CarPlay style UI
*/
if (isiPhone) {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabbarController = [storyboard instantiateViewControllerWithIdentifier:@"iPhone"];
self.window.rootViewController = tabbarController;
}
return YES;
}
这样就简单的实现了iPhone和iPad通用设备开发的根控制器处理
iPad Air 2 横屏:
iPad Air 2 竖屏:
iPhone 6s plus 横屏:
iPhone 6s plus 竖屏:
- UISplitViewController iOS提供的专门用于实现左右结构界面的控制器
1> iOS8以后,iPhone和iPad都可以使用
2> MasterVc : 主视图控制器 一般显示在左边
3> DetailVc : 明细视图控制器 一般显示在右边
4> 默认样式:
iPad竖屏: 显示明细控制器,可以通过手势来显隐主视图
iPad横屏: 显示主视图&明细视图,不可以通过手势显隐主视图
iPhone竖屏: 如果主视图为UIViewController,则显示主视图;如果主视图为UINavigationVc的子控制器,则会显示明细控制器
iPhone横屏: iPhone 6/s Plus下,会显示左右结构,其他设备和iPhone竖屏时的显示一样