处理iPad Mini屏幕尺寸

MCK*_*pur 60 ios ipad-mini

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

我们处理类似于处理iPhone 5的方式吗?

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

小智 60

应用程序将正常工作.但是如果你有一些非常小的UI元素.由于屏幕尺寸的减小,您可能想重新访问它们.

  • 我不明白为什么人们会贬低这一点.它必须是正确的.使用较小的屏幕,UI元素的物理尺寸将变得更小.每英寸的像素数为163,而iPad 2的数据为132.因此,在iPad 2上,(例如)30像素乘30像素的UI元素将为0.227英寸,而iPad mini上仅为0.184英寸的正方形.假设这种差异会导致iPad mini上应用程序的可用性降低,这是完全合理的. (52认同)
  • 我正在投票.屏幕上的按钮在物理上会更小,但用户的手指不会.文本也将在物理上更小,但用户的视力将保持不变.我已经有客户要求在iPad mini上使用与全尺寸iPad不同的设计.就在今天,随着iPad minis来到联邦快递办公室,Apple发布了新版Xcode,其中包括"iPad mini支持".我还没弄清楚究竟是什么意思,但希望它包括一种以编程方式区分迷你和标准尺寸iPad的方法. (5认同)
  • 这是对的.即使在相同的像素尺寸下,元素也会显得比原始iPad小.Upvoted. (4认同)
  • @ColdLogic与iPad和iPad相比,实际上像素尺寸有所减少,但与iPad 3相比有所增加.但是,在iOS中我们很少(从不)以像素为单位而是点数,这不是问题.问题是在这个新的小屏幕上,小UI元素会显得更小.+1 (3认同)

rma*_*ddy 56

如果您的应用程序在iPad 1或iPad 2上运行,它将在新iPad mini上正常工作.迷你上没有视网膜显示屏.从应用程序的角度来看,它与iPad 2完全相同.

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

这只留下一种可能性 - machineuname()该值获取和硬编码检查.这绝不是一种理想的方法.在撰写本文时,我们不知道它的价值.也许iPad5,x假设第四代iPad是iPad4,x.

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

  • 这里没有魔力.iPad mini的屏幕尺寸为1024x768,与前两款iPad相同.由于屏幕物理上较小但像素数相同,因此像素在物理上较小. (30认同)
  • @Yar更新了一个关于iPad mini机器名称的报告. (2认同)

Thu*_*ets 7

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


Mic*_*lum 7

我认为Phil Schiller(苹果公司的高级副总裁)表示最好在新闻发布会上推出iPad Mini(大约53:00进入主题演讲)

我们选择什么屏幕大小?为什么?团队非常努力地思考这个问题.我们希望iPad能够运行为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]);
Run Code Online (Sandbox Code Playgroud)

编辑:

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];
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 很棒的答案+1.这是有史以来最愚蠢的事情,"而像素甚至更容易记住,因为它们完全相同",因为开发者我们使用点而不是像素,因为它的屏幕较小,所以应该是不同的.我根本没有得到这个决定. (2认同)

joh*_*m9r 7

如果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 )
Run Code Online (Sandbox Code Playgroud)

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

#define IS_PAD ( [ [ UIScreen mainScreen ] bounds ].size.height == 512 )
Run Code Online (Sandbox Code Playgroud)

而对于视网膜iPad来说:

#define IS_RETINA_PAD ( [ [ UIScreen mainScreen ] bounds ].size.height == 1024 )
Run Code Online (Sandbox Code Playgroud)

这应区分两种类型的屏幕,并且无需精确定位模型以达到比例目的.另一种方法是使用自动布局,但是没有它我会有更好的控制感.

我希望这有助于你的问题的第二部分.祝好运 :)