#ios #react-native #expo
#iOS #react-native #выставка
Вопрос:
Я создаю приложение, основанное на реакции, и меня смущает, как значения точек различаются между телефонами. Я подтвердил, что iPhone 8 и iPhone 11 имеют плотность пикселей 2 (список Apple размеров экрана устройства и плотности пикселей), и что Expo ожидает того же. (Документы Expo pixelRatio)
Однако, если я создам элемент представления и присвою ему высоту 400 на iPhone 8 и iPhone 11, они явно разного размера. Почему это так?
Пример кода приведен ниже:
import React from 'react';
import {View, PixelRatio} from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
const TestComponent = () => {
console.log('Device.modelName is: ', Device.modelName, 'Pixel ratio.get is: ', PixelRatio.get(), 'getPixelSizeForLayoutSize(400)', PixelRatio.getPixelSizeForLayoutSize(400), 'getFontScale', PixelRatio.getFontScale());
return (
<SafeAreaView>
<View style={{backgroundColor: 'blue', height: 400}}></View>
</SafeAreaView>
}
)
Как и ожидалось, моя консоль регистрируется:
Device.ModelName — это: iPhone 8 Pixel ratio.get — это: 2 getPixelSizeForLayoutSize(400) 800 getFontScale 1
Device.ModelName: iPhone 11 Pixel ratio.get is: 2 getPixelSizeForLayoutSize(400) 800 getFontScale 1
Но элемент явно выше на iPhone 8
Комментарии:
1. Единицы измерения высоты и ширины в React Native не являются пикселями, они не зависят от плотности пикселей. Это скорее попытка сохранить примерно одинаковый физический размер. Может быть, в этом и заключается несоответствие?
2. Ну, эти симуляторы можно изменять, поэтому у вас могут быть не точные размеры. Также я думаю, что iPhone 11 имеет большую плотность пикселей, чем 8 (хотя и не уверен)
Ответ №1:
Когда я выбрал каждый телефон и нажал на window -> physical size, высота элементов стала одинаковой на каждом телефоне.
Я не уверен, почему это не работало раньше. Возможно, в настройках по умолчанию есть что-то странное, что влияет на соотношение пикселей, или я внес изменения, которые я не помню.