Почему высота отличается на 2 элементах на телефонах с одинаковым соотношением пикселей?

#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, высота элементов стала одинаковой на каждом телефоне.

Я не уверен, почему это не работало раньше. Возможно, в настройках по умолчанию есть что-то странное, что влияет на соотношение пикселей, или я внес изменения, которые я не помню.