以编程方式检测 iPad/iPhone 硬件的最佳方法

2023-11-30

我需要找出的原因是,在 iPad 上,UIPickerView 在横向和纵向上具有相同的高度。在 iPhone 上情况有所不同。 iPad 编程指南向 UIDevice 引入了一个“idiom”值:

    UIDevice* thisDevice = [UIDevice currentDevice];
    if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {
        // iPad
    }
    else
    {
        // iPhone
    }

当你使用 iPad (3.2) 但不是 iPhone (3.1.3) 时,它可以正常工作 - 所以看起来还需要一个 ifdef 来有条件地编译该检查,例如:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
        UIDevice* thisDevice = [UIDevice currentDevice];
        if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad)
        {
            // etc.
        }
#endif

对我来说,这开始看起来非常笨拙。有什么更好的办法呢?


在运行时检查(第一种方法)与编译时检查#if 完全不同。预处理器指令不会为您提供通用的应用程序。

首选方法是使用 Apple 的宏:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
     // The device is an iPad running iPhone 3.2 or later.
}
else
{
     // The device is an iPhone or iPod touch.
}

使用 3.2 作为基础 SDK(因为 3.2 之前未定义宏),您可以定位之前的操作系统版本以使其在 iPhone 上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式检测 iPad/iPhone 硬件的最佳方法 的相关文章

随机推荐

  • 在 C 中将指针的地址存储在 unsigned int 中

    是否可以将指针强制转换为 unsigned int 然后将其强制转换回指针 我试图将指向结构的指针存储在 pthread t 变量中 但我似乎无法让它工作 这是我的代码的一些片段 我正在创建一个用户级线程管理库 当我尝试打印线程的 tid
  • 打开文件夹并最大化文件夹窗口

    我有以下简单的 Powershell 脚本 ii E Source Development websites example com au root ii E Source Development websites example com
  • 生成所有可能的互质的排序列表

    我需要生成所有互质的无限排序列表 每对中的第一个元素必须小于第二个元素 排序必须按升序进行 按对元素的总和 如果两个总和相等 则除以该对的第一个元素 因此 结果列表必须是 2 3 2 5 3 4 3 5 2 7 4 5 3 7 2 9 3
  • Bootstrap 5 下拉菜单向右截断

    User 的下拉列表是 cuf of 我正在使用 Bootstrap 5 我在 stackoverflow 上阅读了一篇较旧的文章 建议将 dropdown menu left dropdown menu right on the 这对我不
  • 如何使用midlrt.exe将.idl编译为.winmd?

    背景 我需要构建一个 Windows 运行时组件作为设置为使用的系统的一部分CMake生成其构建系统 作为准备步骤 我尝试在命令行上构建它 从简单的 idl 文件 MyType idl 开始 namespace NS default int
  • cookie / MAMP / CodeIgniter 的问题

    我在使用 MAMP 和 Codeigniter 读取本地主机上的 cookie 时遇到问题 我正在尝试使用 cookie 来验证对管理区域的访问 我可以设置 cookie 我在浏览器上看到它 Chrome 但在授予访问权限后我无法读取它 我
  • 接受 Java 中的证书

    我在通过 Java 与 HTTPS 站点交互时遇到问题 我的程序每次运行时都会使用一个带有不受信任证书的 URL 该程序必须在多个系统上运行 目前 我有以下内容 public class A HostnameVerifier hv new
  • Google 日历 API - 未从 Execute() C# 返回

    运行下面的代码永远不会从执行函数返回 我的个人 Gmail 帐户上有一个私人日历 已与developer gserviceaccount com 帐户共享 查看 API 管理器 用法 引用显示我已经使用过甚至点击了该 API 任何想法表示赞
  • 将非结构化 csv 文件转换为数据框

    我正在学习 R 用于文本挖掘 我有一个 CSV 格式的电视节目表 节目通常从早上 06 00 开始 一直持续到第二天凌晨 05 00 称为播出日 例如 2015 年 11 月 15 日的节目从早上 06 00 开始 到次日凌晨 05 00
  • 在Java中,如何测试对象的监视器是否被锁定? [复制]

    这个问题在这里已经有答案了 在Java中 如何测试对象的监视器是否被锁定 换句话说 给定一个对象 obj 是否有任何线程拥有 obj 的监视器 我不关心哪个线程拥有监视器 我需要测试的是是否有任何线程拥有给定对象的监视器 由于当前线程以外的
  • 如何在 React 中将多个浏览器特定值添加到 CSS 样式中?

    这主要是为了给定的 CSS 属性定义浏览器特定值 如下所示 div Grab me div 如果我将它包装成这样的对象 div Grab me div 然后您复制对象中的键 在严格模式下会失败 否则会覆盖 并且简单地将所有值放入单个字符串中
  • 应用配色方案

    我正在为现有应用程序开发一个新的 UI 目前使用 VB6 并且被告知要使其看起来更好 更漂亮 有没有什么地方可以让我获得一些关于商业应用程序的配色方案 非 25 度灰度 的好主意 仅供参考 我在 WPF 工作 检查这个应用 用于拍摄配色方案
  • 将 json 反序列化为键值对列表

    我有以下 json key key1 value val1 key key2 value val2 我如何将其反序列化为列表 数组NameValuePair
  • 更新 sqlite 中的查询

    活动代码 String MMS SELECT Name FROM UserData WHERE MessagesSent SELECT max MessagesSent FROM UserData db execSQL UPDATE Mai
  • 关于 MPI_Scatter 执行器及其发送缓冲区分配的问题

    我的第一个想法是MPI Scatter和发送缓冲区分配应该用于if proc id 0 子句 因为数据应该只分散一次 并且每个进程只需要发送缓冲区中的一部分数据 但是它无法正常工作 看来发送缓冲区分配和MPI Scatter在应用程序正常运
  • 从 php 中的 url 获取 #

    我正在尝试使用 facebook API 进行编码 这里说 http developers facebook com docs authentication javascript获取 access token 的东西 但它是在 而不是 之后
  • 如何将数据帧转换为标签特征向量?

    我正在 scala 中运行逻辑回归模型 并且有一个如下所示的数据框 df x y 0 0 0 33 0 58 0 96 0 1 1 21 0 10 0 65 1
  • Intel 和 AMD 如何不同但仍然兼容?

    正如我一直以来的理解 AMD 通过逆向工程英特尔的指令集来构建他们的 CPU 现在向英特尔付费以使用他们的指令集 而英特尔对 AMD 的 64 位指令也做了同样的事情 这就是 Windows 可以在两种类型的 CPU 上安装而无需购买特定版
  • Perl 中哈希键的字符串比较

    我在 Perl 中有一个哈希映射 如下所示 MAP MESSAGE TO NUMBER gt Hello World I am XYZ gt 11 I am using Stack Overflow for Guidance gt 12 P
  • 以编程方式检测 iPad/iPhone 硬件的最佳方法

    我需要找出的原因是 在 iPad 上 UIPickerView 在横向和纵向上具有相同的高度 在 iPhone 上情况有所不同 iPad 编程指南向 UIDevice 引入了一个 idiom 值 UIDevice thisDevice UI