react-native app 屏幕适配方案(按照设计稿像素大小写就行)

Posted 桢&诚walker(逆行者)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react-native app 屏幕适配方案(按照设计稿像素大小写就行)相关的知识,希望对你有一定的参考价值。

import React, { Component, PropTypes } from ‘react‘
import { Dimensions, PixelRatio, Platform, StatusBar, View } from ‘react-native‘

let props = {}
export default class Resolution {
  static get(useFixWidth = true) {
    return useFixWidth
      ? {
          ...props.fw,
        }
      : {
          ...props.fh,
        }
  }

  static setDesignSize(dwidth = 750, dheight = 1336, dim = ‘window‘) {
    let designSize = {
      width: dwidth,
      height: dheight,
    }

    let navHeight = Platform.OS === ‘android‘ ? StatusBar.currentHeight : 0
    let pxRatio = PixelRatio.get(dim)
    let { width, height } = Dimensions.get(dim)
    if (dim != ‘screen‘) height -= navHeight
    let w = PixelRatio.getPixelSizeForLayoutSize(width)
    let h = PixelRatio.getPixelSizeForLayoutSize(height)

    let fw_design_scale = designSize.width / w
    fw_width = designSize.width
    fw_height = h * fw_design_scale
    fw_scale = 1 / pxRatio / fw_design_scale

    let fh_design_scale = designSize.height / h
    fh_width = w * fh_design_scale
    fh_height = designSize.height
    fh_scale = 1 / pxRatio / fh_design_scale

    props.fw = {
      width: fw_width,
      height: fw_height,
      scale: fw_scale,
      navHeight,
    }
    props.fh = {
      width: fh_width,
      height: fh_height,
      scale: fh_scale,
      navHeight,
    }

    console.log(
      ‘winSize‘,
      JSON.stringify({
        width,
        height,
      })
    )
    console.log(
      ‘winPixelSize‘,
      JSON.stringify({
        width: w,
        height: h,
      })
    )
    console.log(‘pxRatio‘, pxRatio)
    console.log(‘fixWidth‘, JSON.stringify(props.fw))
    console.log(‘fixHeight‘, JSON.stringify(props.fh))
  }

  static FixWidthView = (p) => {
    let { width, height, scale, navHeight } = props.fw
    return (
      <View
        {...p}
        style={[
          p.style,
          {
            marginTop: navHeight,
            width: width,
            height: height,
            transform: [
              {
                translateX: -width * 0.5,
              },
              {
                translateY: -height * 0.5,
              },
              {
                scale: scale,
              },
              {
                translateX: width * 0.5,
              },
              {
                translateY: height * 0.5,
              },
            ],
          },
        ]}
      />
    )
  }

  static FixHeightView = (p) => {
    let { width, height, scale, navHeight } = props.fh
    return (
      <View
        {...p}
        style={[
          p.style,
          {
            marginTop: navHeight,
            width: width,
            height: height,
            transform: [
              {
                translateX: -width * 0.5,
              },
              {
                translateY: -height * 0.5,
              },
              {
                scale: scale,
              },
              {
                translateX: width * 0.5,
              },
              {
                translateY: height * 0.5,
              },
            ],
          },
        ]}
      />
    )
  }
}
//init
Resolution.setDesignSize()

以上是关于react-native app 屏幕适配方案(按照设计稿像素大小写就行)的主要内容,如果未能解决你的问题,请参考以下文章

vue适配不同屏幕大小_移动端适配的几种方案

H5+CSS3移动端适配技术

Android 屏幕适配

react-native 不同分辨率设备适配(rem、px解决方案)

ios8 之后的Rate us链接地址----屏幕适配判断 和iOS系统按本判断

react-native app在启动屏幕上崩溃