Swift判断iPhone是否有灵动岛

灵动岛是 iPhone14 出现之后的独特设备特性,目前存在的设备类型有 iPhone 14 Pro、iPhone 14 Pro Max、iPhone15 全系列。在 SwiftUI 一些需要忽略安全布局 ignoreSafeArea 的情况下或者需要围绕灵动岛做一些特性时,需要识别 iPhone 设备是否是灵动岛设备。
使用 safeAreaInsets
来检测灵动岛
- 根据Apple 的官方 Live activity 文档,我们只能检测设备是否支持Live activity,但不知道设备是否有动态岛
- 我使用窗口
safeAreaInsets
值来检测灵动岛。当设备方向为纵向时,safeAreaInsets.top
等于59
(显示缩放默认值), 或51
(显示缩放大文本)。 - 这应该可以支持 iPhone系列之后的型号。
用法:print(UIDevice.current.hasDynamicIsland)
1 | extension UIDevice { |
也可以使用Device框架并在扩展中实现一个额外的计算属性来检测动态岛的可用性,但是Device框架是穷举,更新并不及时,所以兼容性并不是很高。
评论
匿名评论隐私政策