Я создаю базовый логин, используя React Native с логотипом и двумя входами:
//import liraries
import React, { Component } from 'react';
import { View, Text, StyleSheet, Image } from 'react-native';
// create a component
class Login extends Component {
render() {
const imageURL = require('./images/CircleLogo.png');
return (
<View style = {styles.container}>
<View style = {styles.loginContainer}>
<Image resizeMode = "contain" style = {styles.logo} source = {imageURL} />
</View>
<View style = {styles.formContainer}>
<LoginForm />
</View>
</View>
);
}
}
// define your styles
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'aliceblue',
},
loginContainer:{
alignItems: 'center',
flexGrow: 1,
justifyContent: 'center'
},
logo: {
position: 'absolute',
width: '70vw',
height: '70vw',
maxWidth: 300
}
});
//make this component available to the app
export default Login;
Как видите, я использую измерения css vw и vh.
Это работает в Интернете, но не на iOS или Android.
Есть ли у кого-нибудь хорошее предложение по обработке измерений vw и vh?
Боковое примечание: похоже, что реакция принимает проценты, как показано здесь, к которому я могу вернуться. Но мой вопрос касается именно измерений vw и vh.






Я не знаю, поддерживает ли react-native единицы области просмотра. Но есть модуль:
https://www.npmjs.com/package/react-native-viewport-units
Установить
npm install react-native-viewport-units --save
использование
var {vw, vh, vmin, vmax} = require('react-native-viewport-units');
Обратите внимание на требуемый оператор / синтаксис: x * vw
<View style = {{height:50*vh, width:50*vw}}/>
var styles = StyleSheet.create({
lookingGood: {
width: 15*vmin,
height: 10*vmax,
padding: 2*vw,
margin: 4*vh,
}
});
Единицы просмотра: vw, vh, vmin, vmax - React Native.
https://github.com/joetakara/react-native-expo-viewport-units
Установить
npm install react-native-expo-viewport-units
или
yarn add react-native-expo-viewport-units
использование
import { vw, vh, vmin, vmax } from 'react-native-expo-viewport-units';
<View style = {{ width: vw(100), height: vh(100) }}>
...
<View>
Вместо veiwport вы можете использовать Dimensions в react-native. PFB ссылка react-native Dimensions.
https://reactnative.dev/docs/dimensions
Я просмотрел другие ответы, все, что работает и просто для новых проектов. Если вы хотите сделать существующий проект адаптивным, я бы рекомендовал использовать пакет ниже.
https://www.npmjs.com/package/react-native-responsive-view-port
Предположим, вы уже создали приложение для 1280 x 800 и хотите, чтобы оно реагировало на все разрешения, тогда вы можете добиться этого, как показано ниже.
До
<View style = {{ width:500 }} ></View>
После
const { vw, vh } = createViewPortConfig({ width : 1280, height : 800 });
<View style = {{ width: 500*vw }} ></View>
Я считаю, что этот метод проще, чем пересчет всех размеров.
Это должен быть принятый ответ! Вместо добавления дополнительной зависимости можно сэкономить и легко полагаться на предпочтительный API
useWindowDimensionsот React-Natives. Он будет распространять обновления и без проблем работает с react-native-web, начиная с версии v0.12.0.