iPhone / iPad 通用应用程序方向

Posted

技术标签:

【中文标题】iPhone / iPad 通用应用程序方向【英文标题】:iPhone / iPad universal app orientation 【发布时间】:2011-02-23 17:41:44 【问题描述】:

我正在开发通用应用程序。现在我想为这两种方式设置方向,当应用程序在 iPhone 上启动时,它以纵向模式打开,当应用程序在 iPad 上启动时,它以横向模式打开。

有可能吗?

【问题讨论】:

【参考方案1】:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
        return YES;
     else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
        return YES;
    

    return NO;

【讨论】:

【参考方案2】:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
  // The device is an iPad running iPhone 3.2 or later.
  // Rotate to landscape

else 
  // The device is an iPhone or iPod touch.
  // Rotate to portrait

“How does one get UI_USER_INTERFACE_IDOM to work with ios 3.2?”

【讨论】:

正如@Emil 所暗示的,您可以在视图控制器中使用上述shouldAutorotateToInterfaceOrientation 方法来控制每个设备的方向。【参考方案3】:

您也可以使用 [UIDevice currentDevice].model 或 [UIDevice currentDevice].systemName 来识别设备,然后在 shouldAutoRotate 方法中根据设备类型返回 interfaceOrientation ==UIInterfaceOrientationLandscapeLeft 用于 ipad 和 interfaceOrientation ==UIInterfaceOrientationPortrait 用于 iphone。

【讨论】:

【参考方案4】:

您可以通过根据my answer here 向您的应用委托添加一些代码来做到这一点。

Swift 代码:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int 
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone 
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
     else 
        return Int(UIInterfaceOrientationMask.LandscapeLeft.rawValue | UIInterfaceOrientationMask.LandscapeRight.rawValue)
    

【讨论】:

以上是关于iPhone / iPad 通用应用程序方向的主要内容,如果未能解决你的问题,请参考以下文章

通用应用程序中启动图像的方向问题

iPhone/iPad - 只将通用打入 iPhone 应用程序

修复横向 iPad 应用程序中的键盘方向(倒置键盘)

iphone, ipad, 通用应用设计, 基于拆分视图

强制通用应用在 iPad 上运行 iPhone 版本

如何在单独的类中创建通用 Iphone/Ipad 应用程序?