ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-03-15 15:02:27  阅读:213  来源: 互联网

标签:scale fw 适配 app height react width let fh


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 * .5
            },
            {
              translateY: -height * .5
            },
            {
              scale: scale
            },
            {
              translateX: width * .5
            },
            {
              translateY: height * .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 * .5
            },
            {
              translateY: -height * .5
            },
            {
              scale: scale
            },
            {
              translateX: width * .5
            },
            {
              translateY: height * .5
            }
          ]
        }]
      }
      />
    );
  };
};
//init
Resolution.setDesignSize();

标签:scale,fw,适配,app,height,react,width,let,fh
来源: https://www.cnblogs.com/fanzhen/p/12497637.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有