【问题标题】:Determine iOS Simulator selected device确定 iOS 模拟器选择的设备
【发布时间】:2016-03-16 15:47:58
【问题描述】:

有没有办法以编程方式确定 iPhone sim 中使用的是哪个模拟设备? UIDevice 只返回 iPhone 模拟器,无论我选择 iPhone4、5s、6、iPad 等。

【问题讨论】:

  • 为什么需要知道?你的目标是什么?

标签: ios


【解决方案1】:

了解当前设备。

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

【讨论】:

  • 不要使用这些。任何使用这些宏的人都做错了。
  • 请参阅 iOS 视图控制器编程指南的 Adaptivity and Size Changes 部分。
  • 他们要求一种方法来确定哪个模拟器正在运行。一个有效的需求是,并非我们所有人都拥有每台用于测试的设备,并且想要验证每种设备都得到了正确处理。我需要这个信息是修补一些早于 Autolayout 和 Size Classes 的代码。我“应该”重写那个代码,但我没有重写大量代码的预算,所以我需要修补它。这是唯一便宜的方法。当在不修复错误和以“错误”方式进行之间做出选择时,在预算范围内完成工作总是胜过理论。
  • 对于新代码,请避免使用这种方法,rmaddy 到上述文档的链接是一个更好的解决方案。我必须维护一些旧的 iOS 4 代码,这是一个主要的痛苦,新方法要好得多,并且避免了随着新设备和多任务等功能的出现而不得不修补大小问题。
猜你喜欢
  • 2021-03-07
  • 2014-06-16
  • 2014-12-04
  • 1970-01-01
  • 2021-03-28
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多