iOS 如何通过宏检测iPhone X、iPhone 6 plus、iPhone 6、iPhone 5、iPhone 4?

2023-12-04

如何通过宏检测设备型号? 我使用过类似的东西,但模拟器上的结果总是 IS_IPHONE_5

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)  

Swift

import UIKit

public enum DisplayType {
    case unknown
    case iphone4
    case iphone5
    case iphone6
    case iphone6plus
    static let iphone7 = iphone6
    static let iphone7plus = iphone6plus
    case iphoneX
}

public final class Display {
    class var width:CGFloat { return UIScreen.main.bounds.size.width }
    class var height:CGFloat { return UIScreen.main.bounds.size.height }
    class var maxLength:CGFloat { return max(width, height) }
    class var minLength:CGFloat { return min(width, height) }
    class var zoomed:Bool { return UIScreen.main.nativeScale >= UIScreen.main.scale }
    class var retina:Bool { return UIScreen.main.scale >= 2.0 }
    class var phone:Bool { return UIDevice.current.userInterfaceIdiom == .phone }
    class var pad:Bool { return UIDevice.current.userInterfaceIdiom == .pad }
    class var carplay:Bool { return UIDevice.current.userInterfaceIdiom == .carPlay }
    class var tv:Bool { return UIDevice.current.userInterfaceIdiom == .tv }
    class var typeIsLike:DisplayType {
        if phone && maxLength < 568 {
            return .iphone4
        }
        else if phone && maxLength == 568 {
            return .iphone5
        }
        else if phone && maxLength == 667 {
            return .iphone6
        }
        else if phone && maxLength == 736 {
            return .iphone6plus
        }
        else if phone && maxLength == 812 {
            return .iphoneX
        }
        return .unknown
    }
}

查看实际效果https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346

注意:如果例如iPhone 6 处于缩放模式,UI 是 iPhone 5 的放大版本。这些功能不是确定设备类型,而是确定显示模式,因此 iPhone 5 是本示例中所需的结果。

Objective-C

#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_ZOOMED (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

#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)
#define IS_IPHONE_X (IS_IPHONE && SCREEN_MAX_LENGTH == 812.0)

Usage: http://pastie.org/9687735

注意:如果例如iPhone 6 处于缩放模式,UI 是 iPhone 5 的放大版本。这些功能不是确定设备类型,而是确定显示模式,因此 iPhone 5 是本示例中所需的结果。

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

iOS 如何通过宏检测iPhone X、iPhone 6 plus、iPhone 6、iPhone 5、iPhone 4? 的相关文章

  • UILocalNotification 播放自定义声音

    我在我的应用程序中实现了本地通知 但我只是想知道是否有一种方法可以播放不属于 iPhone 应用程序主包的一部分的声音 基本上在我的应用程序中 我希望用户录制生成本地通知时播放的声音 而不是播放预先录制的或默认的声音 据我所知 这是可以实现
  • rightBarButtonItem 信息按钮,右侧没有空格

    我有一个UIViewController设置为在其右侧显示一个信息按钮UINavigationItem像这样 UIButton infoButton UIButton buttonWithType UIButtonTypeInfoLight
  • 如何在 iOS 中通过 Twitter API 获取用户电子邮件地址?

    我尝试了多个 SDK 但无法从任何资源获取电子邮件 ID 我努力了FHSTwitterEngine为此目的 但我没有得到解决方案 FHSTwitterEngine twitterEngine FHSTwitterEngine sharedE
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • 将静态库合并为单个

    如何将静态库合并为一个 我确实有三个静态库 libSignatureLibary armv6 a libSignatureLibary armv7 a 和 libSignatureLibary i368 a 现在我想将这三个文件合并到一个库
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • 直接在 XCode 中编译 Arm Assembly

    将arm汇编代码编译成xcode的最佳方法是什么 我有生成的那些程序集文件 有没有办法可以将 s 文件直接包含到我拥有的 C 代码中 或者我需要先运行一个预处理器 它将生成 o 文件 我可以将其与我的文件链接 如果是这样的话 在 XCode
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se
  • UIWebView:在 Safari 中打开一些链接,一些在视图中打开

    我的应用程序具有在 UIWebView 中呈现的内容 出于文本格式原因 内容中有一些链接 其中一些链接应在移动 Safari 中打开其目标 而其他链接则应在内容中导航 到目前为止 我已经使用 UIWebView 委托捕获了链接请求 在我的实
  • iPhone 核心数据:无法找到 NSManagedObjectModel

    我使用 Apple 的 CoreDataBooks 示例项目作为核心数据的学习辅助工具 我修改了应用程序 以便在加载应用程序时我首先显示菜单页面 而不是图书表视图 RootViewController 我做了以下事情 我在界面生成器中创建了
  • 我的 iPhone 6 获取 iPhone 5 媒体查询

    我不明白这里发生了什么事 我在 CSS 媒体查询中专门针对 iphone 5 media only screen and min device width 320px and max device width 568px some div
  • Xcode 在我的 iPhone 应用程序上运行 codesign 后如何运行脚本?

    我编写了一个脚本 它执行一些步骤来将我的构建打包为临时发行版 我的第一个猜测是在我的 Ad Hoc 目标中使用运行脚本阶段 但看起来协同设计被固定在构建 iPhone 应用程序链的最后位置 有人知道如何在构建过程的最后一刻运行我的脚本 Up
  • 如何顺序访问字典?

    我想以元素存储在字典中的方式访问字典 有人可以帮我做这件事吗 提前致谢 字典将其值存储在由键或更精确地由键的哈希值索引的结构中 这就是他们速度很快的原因 他们不需要搜索值 他们只需获取键的值并直接查找值 在大多数情况下 只有在发生冲突的键哈

随机推荐

  • Python - 在图中寻找模式

    该图是由以下生成的gnuplot脚本 这estimated csv文件可以在此链接中找到 https drive google com open id 0B2Iv8dfU4fTUaGRWMm9jWnBUbzg GNU Plot set st
  • 检查 Bash 数组是否包含值

    在 Bash 中 测试数组是否包含某个值的最简单方法是什么 这种方法的优点是不需要循环所有元素 至少不需要显式循环 但是由于array to string internal in array c仍然循环遍历数组元素并将它们连接成一个字符串
  • 使用带有管道输入的 gdb 而不创建文件

    我有一个接受管道输入的程序 bash gt echo something program seomthingelse 如何将此输入重定向到 gdb 而不创建新文件 如何将此输入重定向到 gdb 而不创建新文件 您可以创建一个命名管道 不确定
  • Spring中将变量传递给@Qualifier注解

    Spring中是否可以将变量传递给 Qualifier注解 例如 Autowried Qualifier datasource jobParameters datasource number private DataSource ds 我有
  • ios8 的 Parse 推送通知没有声音

    我在向 iOS8 设备推送通知时遇到问题 一切正常 但推送没有响铃 只出现在屏幕上 我通过仪表板发送正常推送 默认情况下启用声音 我在iPhone4 iOS 7 1 2 iPhone5 iOS 7 0 4 上测试 工作正常 但在iOS 8的
  • 将列表元素作为参数传递给 mixin

    以下代码有效 除非我尝试通过 gradient to include background image mixin compositeFill size 100px gradient top 000000 0 FFFFFF 100 isTo
  • Cython pyd 文件不通过 python 导入

    我正在用 python 编写一个程序来模拟粒子的反应 目的是向用户传授粒子反应的知识 由于 python 执行必要的处理速度太慢 我转向 Cython 来提高速度 它很有效 我可以编译我的 pyx文件到一个 pyd可以通过简单的命令从 py
  • 当数据包含换行符时 Text::CSV 解析

    我有一个解析 csv 文件的代码 并且数据还包含换行符 但是 Text CSV 在数据中遇到 n 时会中断 这是解析代码 use Data Dumper use Text CSV my csv Text CSV gt new binary
  • 使用 NSDateFormatter 进行日期格式化的问题

    我有一个日期字符串 我想将其转换为另一种格式 原始日期字符串示例是 2013 06 04 02 19 21 0000 我想将其转换为 6 月 4 日 星期三 NSString date string 2013 06 04 02 19 21
  • Java中如何防止ArrayList中的元素被删除?

    我想要一个ArrayList 并限制元素脱绒 我该怎么做 创建一个包装器List不允许删除的接口 只允许删除所需的方法 class MyArrayList
  • 触发事件 WPF 的计时器

    我这里有一个项目 它默认设置由 MouseEnter 事件发生操作 我的意思是 打开一个窗口 关闭 返回等等 仅通过 MouseEnter 事件发生 我被要求在 3 秒后触发事件 这意味着用户将鼠标放在控件上 仅在 3 秒后 窗口中的所有控
  • 如何在codeigniter中使用ajax上传文件

    我正在尝试使用 ajax 上传文件以及其他参数 但是 文件没有上传 表格代码
  • 如何在C中迭代字符串?

    现在我正在尝试这个 include
  • ANSI 颜色转义序列列表

    在大多数终端上 可以使用以下命令对输出进行着色 033ANSI 转义序列 我正在寻找所有支持的颜色和选项 例如明亮和闪烁 的列表 由于支持它们的终端之间可能存在差异 因此我主要对 xterm 兼容终端支持的序列感兴趣 您正在寻找的 ANSI
  • FFMPEG 将视频与图像叠加会删除音频

    我使用以下命令从给定的视频和图像生成视频 我还填充和缩放视频 这个命令效果很好 它生成了预期的结果 但是在结果视频中没有声音 ffmpeg exe i input mp4 i rj2k15y3 png filter complex 0 v
  • 根据类型类设置抽象类型

    我有一个这样的例子 abstract class IsBaseTC A type Self abstract class JustHoldsTypeMember A extends IsBaseTC A implicit val doubl
  • 活动未延伸至横向切口下方

    在我的活动中 我使用以下代码打开 关闭全屏 我所说的全屏是指隐藏 显示状态栏 该问题发生在具有切口 有摄像头的地方 且状态栏可见且处于横向状态的设备上 当状态栏隐藏或 和处于纵向时它会延伸 if aStatus Hide getWindow
  • Bash 脚本让用户从列表中选择或输入自己的

    我有一个简单的脚本 我想列出一些预先填充的选项 或者让用户输入一个与构建相关的数字 这就是我目前所拥有的 read p Please select from the list below or enter the build number
  • Dapper 源代码 - 这会正确处理我的连接吗?

    查看 Dappers QueryAsync 方法的源代码 SqlMapper Async cs private static async Task
  • iOS 如何通过宏检测iPhone X、iPhone 6 plus、iPhone 6、iPhone 5、iPhone 4?

    如何通过宏检测设备型号 我使用过类似的东西 但模拟器上的结果总是 IS IPHONE 5 define IS IPAD UI USER INTERFACE IDIOM UIUserInterfaceIdiomPad define IS IP