iPhone放大模式詳解

背景

在項目中,須要針對iphone的劉海屏幕進行單獨的適配,這就須要看如何檢測劉海屏幕了。並且,同一款機型,得出來的屏幕分辨率還有可能不一樣,下面把處理劉海屏中踩過的坑進行總結。bash

檢測iphone劉海屏

某些狀況下,咱們在樣式方面須要對iphone的劉海屏機型須要作特殊的處理。目前有三款劉海屏iphone,分別是iphoneXiphoneXRiphoneXS max三種。其中三者的分辨率和像素比是不一樣的,並且iphoneXRiphoneXS max兩款手機還能夠選擇放大的顯示模式,所以理論上有兩種不一樣的分辨率。關於顯示模式的介紹能夠看下面的內容。iphone

具體的分辨率狀況以下:ui

設備 像素比(dpr) 屏幕分辨率 放大模式
iphoneX 3 1125*2436
iphoneXs max 3 1242*2688 1125*2436
iphoneXr 2 828 *1792 750*1624

判斷邏輯

綜上特色,所以須要根據ua中的信息,判斷當前手機的平臺,以及根據當前獲取到的分辨率,推斷當前是否爲劉海機型。直接貼代碼:this

// 得到手機平臺
OS: (function() {
    const userAgent = navigator.userAgent;
    if (/\bAndroid\b/i.test(userAgent)) {
      return 'Android';
    } else if (
      /\bip[honead]+\b/i.test(userAgent) ||
      /\biOS\b/i.test(userAgent)
    ) {
      return 'IOS';
    }
    return null;
  }()),
  
// 判斷機型
let ratio = window.devicePixelRatio || 1;
let screen = {
  width: window.screen.width * ratio,
  height: window.screen.height * ratio
};
const isX = screen.width === 1125 && screen.height === 2436;
const isXSMAX = screen.width === 1242 && screen.height === 2688;
const isXR = (screen.width === 750 && screen.height === 1624 || screen.width === 828 && screen.height === 1792);

// 那麼判斷是不是劉海屏
const isIOS = this.OS === 'IOS';
return isIOS && (isX || isXSMAX || isXR);
複製代碼

爲何放大模式須要單獨適配

iphone的放大模式原理是使用較低以及的邏輯分辨率渲染,而後拉伸顯示到屏幕上spa

例如新機推出時,若是有新的分辨率時,有一種比較簡單的適配就是適配以前相同比例下面的小屏,例如plus機型適配到同數字的機型,max機型適配到X機型等等。code

iPhone的16:9的屏幕的邏輯分辨率,一共有三種:320×480,375×667,414×736,分別對應4'',4.7'',5.5''的屏幕。 對於4.7''和5.5''的屏幕來講,更低一級的邏輯分辨率分別是320×480和375×667。同時,只要App適配這兩個分辨率(固然是適配的),那麼不須要作任何修改,就能夠直接運行。好了,爲何iPhone X沒有放大模式呢?由於iPhone X沒有現成的更低一級的邏輯分辨率,若是強行加上,那麼幾乎所有App都要針對一個新的、只有在iPhone X的放大模式下才會出現的邏輯分辨率進行適配,這個成本實在是太大了。固然,iPhone XS Max上是有放大模式的,由於iPhone X的邏輯分辨率,就是iPhone XS Max放大模式下的邏輯分辨率,一樣不須要針對性適配。ip

相關文章
相關標籤/搜索