如何区分iPhoneX与iPhone8/7/6?Ti.Platform.displayCaps无法识别屏幕差异
如何在Titanium中准确检测iPhoneX系列机型的屏幕尺寸?
我完全懂你的困扰——当初我第一次用Ti.Platform.displayCaps区分iPhoneX和6/7/8的时候也懵了,毕竟这两类机型的逻辑分辨率都是375x667,所以这个接口返回的参数确实会完全一致。但要区分它们,其实有两个靠谱的解决办法:
方法一:通过设备型号标识符判断
每个iPhone机型都有唯一的型号代码,我们可以通过Ti.Platform.model获取这个代码,然后判断是否属于iPhoneX及后续的全面屏机型。这种方法精准,但需要维护型号列表(新机型发布后要补充更新)。
示例代码:
function isIPhoneXSeries() { const model = Ti.Platform.model; // 这里列了主流的全面屏iPhone型号,后续新机型可以补充进来 const xSeriesModels = [ 'iPhone10,1', 'iPhone10,4', // iPhoneX 'iPhone10,2', 'iPhone10,5', // iPhoneX Plus 'iPhone11,2', // iPhoneXs 'iPhone11,4', 'iPhone11,6', // iPhoneXs Max 'iPhone11,8', // iPhoneXR 'iPhone12,1', 'iPhone12,3', // iPhone12/12 Pro 'iPhone12,5', 'iPhone12,8' // iPhone12 Pro Max/12 mini ]; return xSeriesModels.includes(model); } // 使用示例 if (isIPhoneXSeries()) { Ti.API.info('当前是iPhoneX系列全面屏机型'); // 获取物理分辨率 const { platformWidth, platformHeight } = Ti.Platform.displayCaps; Ti.API.info(`物理屏幕尺寸: ${platformWidth}x${platformHeight}`); } else { Ti.API.info('当前是非全面屏机型(比如iPhone6/7/8)'); }
方法二:通过安全区域(Safe Area)判断
iPhoneX及后续全面屏机型因为有刘海,屏幕的安全区域和非全面屏机型差异明显——非全面屏的安全区域顶部通常是20(状态栏高度)、底部是0,而全面屏的顶部是44、底部是34。这种方法不需要维护型号列表,适配性更强。
示例代码:
const mainWindow = Ti.UI.createWindow({ backgroundColor: '#ffffff' }); mainWindow.addEventListener('open', () => { const safeInsets = mainWindow.safeAreaInsets; // 通过顶部和底部的内边距判断是否为全面屏 if (safeInsets.top > 20 || safeInsets.bottom > 0) { Ti.API.info('这是iPhoneX系列全面屏机型'); // 计算安全区域的实际可用尺寸 const safeWidth = mainWindow.size.width; const safeHeight = mainWindow.size.height - safeInsets.top - safeInsets.bottom; Ti.API.info(`安全区域可用尺寸: ${safeWidth}x${safeHeight}`); } else { Ti.API.info('这是非全面屏机型'); } }); mainWindow.open();
小建议
如果你的需求是适配UI布局,优先用安全区域检测的方法,因为它能自动适配未来的新机型;如果只是单纯需要判断机型,型号检测会更直接。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

