Как использовать vw и vh css с React Native

Я создаю базовый логин, используя 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.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
9
0
19 456
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я не знаю, поддерживает ли 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

Это должен быть принятый ответ! Вместо добавления дополнительной зависимости можно сэкономить и легко полагаться на предпочтительный API useWindowDimensions от React-Natives. Он будет распространять обновления и без проблем работает с react-native-web, начиная с версии v0.12.0.

tjeisenschenk 16.11.2020 14:52

Я просмотрел другие ответы, все, что работает и просто для новых проектов. Если вы хотите сделать существующий проект адаптивным, я бы рекомендовал использовать пакет ниже.

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>

Я считаю, что этот метод проще, чем пересчет всех размеров.

Другие вопросы по теме