【问题标题】:if (device == iPad), if (device == iPhone)如果(设备 == iPad),如果(设备 == iPhone)
【发布时间】:2011-10-26 04:02:37
【问题描述】:

所以我有一个通用应用程序,我正在设置UIScrollView 的内容大小。显然,iPhone 和 iPad 上的内容大小会有所不同。如何为 iPad 设置特定尺寸,为 iPhone 和 iPod touch 设置其他尺寸?

【问题讨论】:

标签: objective-c ios xcode uiscrollview


【解决方案1】:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
     // The device is an iPad running iOS 3.2 or later.
}
else
{
     // The device is an iPhone or iPod touch.
}

【讨论】:

    【解决方案2】:
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    

    宏 UI_USER_INTERFACE_IDIOM() 也可以在 iOS 3.0 等较旧的 iOS 版本上运行而不会崩溃。

    【讨论】:

      【解决方案3】:

      UI_USER_INTERFACE_IDIOM() 是您的最佳解决方案,因为您的应用程序是通用的。但是,如果您在 iPad 上运行 iPhone 应用程序,那么无论使用哪种设备,UI_USER_INTERFACE_IDIOM() 都会返回UIUserInterfaceIdiomPhone。为此,您可以使用UIDevice.model 属性:

      if ([[UIDevice currentDevice].model rangeOfString:@"iPad"].location != NSNotFound) {
      
          //Device is iPad
      }
      

      【讨论】:

      • 这是不现实的。据我所知,UIDevice.model 属性等于“设置”>“关于”中存在的字符串,并且可由用户更改。来源:developer.apple.com/library/ios/documentation/uikit/reference/…
      • @KennethJ 感谢您的警告,但我已经检查过了,但我不这么认为。设置 > 常规 > 关于 > 型号为我的 iPhone 5 提供“MD297B/A”并且不可编辑(在菜单上只有“名称”字段是可编辑的)。您提供的 API 链接指出 device.model 是只读的,@”iPhone” 和 @”iPod touch” 是可能的值。
      • 是的,您说的很对,我错误地查看了“名称”而不是“型号”。我的立场是正确的。
      【解决方案4】:

      在 Swift 2.x 中,您可以使用以下等式来确定设备的种类:

      UIDevice.currentDevice().userInterfaceIdiom == .Phone

      UIDevice.currentDevice().userInterfaceIdiom == .Pad

      在 Swift 3 中为新来的人准备。

      if UIDevice.current.userInterfaceIdiom == .pad { \\ Available Idioms - .pad, .phone, .tv, .carPlay, .unspecified \\ Implement your awesome logic here }

      【讨论】:

        【解决方案5】:

        UIDevice 课程将告诉您您需要了解的有关设备的所有信息。例如,model 属性将告诉您设备的型号。您可以使用它来确定当前设备使用哪个视图。

        【讨论】:

        • 不建议使用模型属性,因为它不是面向未来的。
        • 这是我第一次听说这个。你能给我一个链接吗?如果是这种情况,我将删除我的答案。
        • 实际上,我是在 WWDC 会议上听到的关于让 iOS 应用面向未来的会议。使用模型属性会给你一个字符串。如果 Apple 发布了与 iPhone 类似但有另一个名称的新 iOS 设备,例如“iPhone nano”,则该应用程序将无法正常运行。我建议在这种情况下使用 UIScreen 的 applicationFrame 属性。这类似于确定硬件功能:与其只在 iPhone 和 iPad 上启用陀螺仪,不如在 Core Motion 这么说的情况下启用它。如果 iPod touch 或未来的设备也支持它,那么你就有问题了。 ;-)
        【解决方案6】:

        使用UIScreen 类来确定应用程序的框架。

        CGRect usableSpace = [[UIScreen mainScreen] applicationFrame];
        

        返回的矩形是屏幕大小减去状态栏。不要使用 UI 习惯用法来确定可用空间,因为它们不是面向未来的。

        顺便说一句,UIViewController 可以自动调整内容视图(包括滚动视图)的大小,并为您提供其他好处,例如自动旋转。如果它适合您的情况,请考虑。

        【讨论】:

        • 成语就是现在的样子,以后再改也是小菜一碟。它们比您的建议更清晰、更有意义,恕我直言。
        • @Inspire48:问题是:如何正确调整滚动视图的大小?最简单的方法是使用系统提供的大小。因此,即使在一个未知的 iDevice 上,代码也不会中断,因为您不会关心设备(惯用语),而只关心显示(调整滚动视图的大小等)。显然,对于许多其他情况,使用成语是要走的路。 ;-)
        【解决方案7】:

        如果你使用的是 swift,

            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad)
            {
             // device is ipad
            }
            else
            {
             //device is  iPhone 
            }
        

        您还可以检查 UIUSerInterfaceIdiom 并选择您想要的设备 UIUserInterfaceIdiom.Pad 或 UIUserInterfaceIdiom.Phone 或 UIUserInterfaceIdiom.TV 或 UIUserInterfaceIdiom.CarPlay

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-23
          • 1970-01-01
          • 2011-10-14
          相关资源
          最近更新 更多