【问题标题】:Dealing with iPad Mini screen size处理 iPad Mini 屏幕尺寸
【发布时间】:2012-10-13 18:10:07
【问题描述】:

新款 iPad Mini 的屏幕尺寸为 7.9 英寸。它有视网膜显示器吗?它会自动扩展现有的 xib 和故事板,还是我们必须为每个版本创建两个版本?

我们处理它的方式是否类似于处理 iPhone 5 的方式?

如何创建定义或条件来查看设备是否运行 iPad Mini?

【问题讨论】:

  • 嗯,接受的答案没有回答你问题的第二部分。
  • 干得好。我承认这个问题还为时过早。
  • 注意:识别模型是有问题的;不知道未来可能存在哪些模型。 iPad mini 与大多数 iPhone 一致;报告的界限和规模收益率接近实际设备尺寸,如果考虑界限是 1/160 的原始 iPhone 单位。这是其他 iPad 与 Apple 的“点”原始尺寸“不一致” - 他们放大了与报告的边界和比例相比,图像约为 20%。(边界以 1/132 英寸而不是 1/160 英寸为单位)。现在 iPad mini 存在,一种策略是为其设计,并简单地允许其他 iPad将所有内容放大 20%。

标签: ios ipad-mini


【解决方案1】:

应用程序可以正常运行。但是如果你有一些非常小的 UI 元素。由于屏幕尺寸减小,您可能需要重新访问它们。

【讨论】:

  • 我不明白为什么人们不赞成这个。它必须是正确的。屏幕越小,UI 元素的物理尺寸就会越小。每英寸像素数为 163,而 iPad 2 为 132。因此(例如)30 像素 x 30 像素的 UI 元素在 iPad 2 上将是 0.227 英寸见方,但在 iPad mini 上只有 0.184 英寸见方。完全有理由假设这种差异会导致应用在 iPad mini 上的可用性下降。
  • 正确的。即使在相同的像素尺寸下,元素也会显得比原始 iPad 上的要小。赞成。
  • @ColdLogic 实际上,与 iPad 和 iPad 相比,像素大小有所减小,但与 iPad 3 相比有所增加。然而,在 iOS 中,我们很少(从不)以像素为单位,而是以点为单位,这不是问题。问题是小的 UI 元素在这个新的、更小的屏幕上会显得更小。 +1
  • 我赞成这个。屏幕上的按钮在物理上会更小,但用户的手指不会。文本在物理上也会更小,但用户的视力将保持不变。我已经有客户要求在 iPad mini 上采用与全尺寸 iPad 不同的设计。就在今天,当联邦快递推出 iPad mini 时,Apple 发布了包含“iPad mini 支持”的新版 Xcode。我还没有弄清楚这到底意味着什么,但希望它包括一种以编程方式区分 mini 和标准尺寸 iPad 的方法。
  • 如果您遵循 Apple 的指南并将按钮保持在至少 44x44 点,那么就不会有问题。非视网膜 iPhone/iPod 的 PPI 与 iPad mini (163 PPI) 相同,因此 44x44 指南对所有设备基本上都是安全的。
【解决方案2】:

如果您的应用可以在 iPad 1 或 iPad 2 上运行,那么它将在新的 iPad mini 上按原样运行。 mini 上没有视网膜显示屏。从应用的角度来看,它与 iPad 2 相同。

编辑:有人询问如何确定应用程序何时在 iPad mini 上运行。对此没有 API 检查。屏幕尺寸没有帮助。 UI_USER_INTERFACE_IDIOM() 没有帮助。在有人真正拥有之前,没有办法知道UIScreenMode pixelAspectRatio 是否有任何不同(可能与 iPad 2 相同)。

这只剩下一种可能性——从uname() 获取machine 并硬编码一个针对该值的检查。这绝不是一种理想的方法。在撰写本文时,我们不知道价值是什么。也许 iPad5,x 假设第四代 iPad 是 iPad4,x

编辑:到目前为止,我看到一份报告称 iPad mini 返回 iPad2,5(是的,这是两个逗号 5)以及 iPad2,6 和 iPad2,7 作为机器名称。

【讨论】:

  • 它是如何工作的?我知道 Apple 的一切“Just Works”,但如何缩小应用程序的大小? iOS 是否使用自动布局来重新定位所有内容?
  • 这里没有魔法。 iPad mini 的屏幕尺寸为 1024x768,与第一款两台 iPad 相同。由于屏幕在物理上更小,因此像素在物理上更小,但像素数相同。
  • @Yar 更新了一份关于 iPad mini 机器名称的报告。
【解决方案3】:

为 iPad 2 分辨率构建应用程序。新的 iPad Mini 没有视网膜,分辨率为 1024x768,这意味着已经在 iPad 1 或 iPad 2 上运行的应用程序会自动在 iPad Mini 上运行。

【讨论】:

    【解决方案4】:

    我认为 Phil Schiller(Apple 高级副总裁)在press event 发布 iPad Mini 时说得最好(大约 53:00 进入主题演讲)

    我们选择什么屏幕尺寸,为什么?团队真的很努力 考虑到这一点。我们想要一台能够运行所有 为 iPad 编写的令人惊叹的软件,无需开发人员 做任何工作......

    他接着说:

    ...而且像素更容易记住,因为它们正是 相同的。最初的 iPad 和 iPad 2 是 1024 x 768 和新的 iPad Mini 是 1024 x 768。这意味着为 iPad 可在 iPad Mini 上正常运行。

    因此,总而言之,为了回答您的问题,iPad Mini 没有 Retina 显示屏,您无需做任何额外的工作。 iPad Mini 将利用您已经为 iPad 创建的故事板或 xib。

    那么就检测而言,我还找不到任何证据来证明这一点(因为它们尚未发布)但我愿意打赌以下将输出“iPad Mini”。

    NSLog(@"%@",[[UIDevice currentDevice] model]);
    

    编辑:

    NSLog(@"\nMachine ID: %@\nModel: %@\nLocalized Model: %@",machineName(),[[UIDevice currentDevice] model],[[UIDevice currentDevice] localizedModel]);
    
    NSString *machineName()
    {
    
        struct utsname systemInfo;
        uname(&systemInfo);
    
        return [NSString stringWithCString:systemInfo.machine
                                  encoding:NSUTF8StringEncoding];
    }
    

    在我的 16GB iPad Mini(仅限 Wifi)上返回:

    机器 ID:iPad2,5
    型号:iPad
    本地化机型:iPad

    【讨论】:

    • @JeffKelley 很有趣,当我的任务到货时,验证这是我今天的待办事项清单上的第一件事!
    • 很好的答案 +1。这是有史以来最愚蠢的事情,“而且像素更容易记住,因为它们完全相同”,因为作为开发人员,我们使用点而不是像素,因为它的屏幕较小,所以应该有所不同。我完全不明白这个决定。
    • @JeffKelley “不输出 Ipad”是什么意思?它是否为 machineId 输出 iPad2,5?
    • [[UIDevice currentDevice] model] 的输出是“iPad”。
    【解决方案5】:

    如果 iPad Mini 和非视网膜 iPad 的屏幕尺寸无论如何都相同,您不能使用类似的东西来确定设备屏幕是 iPhone 5 还是 iPhone 4:

    #define IS_WIDESCREEN5 ( [ [ UIScreen mainScreen ] bounds ].size.height == 568 )
    #define IS_WIDESCREEN4 ( [ [ UIScreen mainScreen ] bounds ].size.height == 480 )
    

    因此,对于 iPad Mini 和非视网膜 iPad,请执行以下操作:

    #define IS_PAD ( [ [ UIScreen mainScreen ] bounds ].size.height == 512 )
    

    对于视网膜 iPad 的做法:

    #define IS_RETINA_PAD ( [ [ UIScreen mainScreen ] bounds ].size.height == 1024 )
    

    这应该区分两种类型的屏幕,并且无需为了缩放目的而精确定位模型。另一种方法是使用自动布局,但是没有它我会有更好的控制感。

    我希望这对您问题的第二部分有所帮助。祝你好运:)

    【讨论】:

    • 或者您可以使用 Apple 提供的方法:CGFloat screenScale = [[UIScreen mainScreen] scale]; 对于非视网膜返回“1.0”,对于视网膜返回“2.0”,并且适用于所有 iOS 设备,而不仅仅是 iPad。并且对于将来出现的任何设备都很有用。
    【解决方案6】:

    你不必做任何不同的事情。它应该像苹果所说的那样自动工作。分辨率还是和 iPad 一样。

    【讨论】:

      【解决方案7】:

      iPad mini 使用与非视网膜 iPad 相同的分辨率,iOS 将使用 1x 图形。 参考这个链接... link

      【讨论】:

        【解决方案8】:

        ipad mini 的图像与 ipad 1 和 2 相同。 但建议您也将@2x 图像用于视网膜屏幕。因为,一旦您的应用程序在应用商店上架,您就无法阻止人们在具有视网膜显示屏的 ipad 上下载它。

        所以此时,您必须为视网膜和非视网膜制作图像。

        ipad 视网膜显示不需要单独的 xib 文件。只需为所有图片资源保留 imageName@2x.png。

        【讨论】:

          【解决方案9】:

          为了检测 iPad Mini(任何型号),我正在使用此代码(在 iOS 10.x 上测试):

          - (BOOL)isIPadMini {
             return [[UIDevice currentDevice].name hasPrefix:@"iPad Mini"];
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-10
            • 1970-01-01
            • 2015-11-18
            • 2017-05-20
            • 1970-01-01
            • 2015-12-03
            • 2015-12-06
            • 1970-01-01
            相关资源
            最近更新 更多