Вопрос или проблема
Ранее я мог изменять жирность шрифта, не указывая семейство шрифтов “-Bold”, а просто задавая соответствующую жирность.
После обновления шрифт не выбирается на основе ширины, хотя это предусмотренное поведение согласно документации: https://reactnative.dev/docs/text-style-props#fontweight
На Android всё работает как ожидалось.
Вот мой тестовый код:
<Text
style={[
{ fontFamily: 'Chivo-Bold', fontSize: 31 },
{ fontSize: 32, lineHeight: 35, fontWeight: '700', letterSpacing: -0.5 },
]}
>
Aasd sadasdƒ Sg
</Text>
<Text
style={[
{ fontFamily: 'Chivo-Regular', fontSize: 31 },
{ fontSize: 32, lineHeight: 35, fontWeight: '700', letterSpacing: -0.5 },
]}
>
Aasd sadasdƒ Sg
</Text>
Вот как это выглядит в RN 0.75 и 0.71 без Новой Архитектуры
Вот как это выглядит в RN 0.76 с Новой Архитектурой
Ответ или решение
Проблема с рендерингом жирного текста в React Native 0.76 на iOS: Разбор и Рекомендуемые Решения
С обновлением до версии React Native 0.76 у пользователей возникли проблемы с рендерингом жирного текста на платформе iOS. В предыдущих версиях, таких как 0.71 и 0.75, можно было изменять начертание шрифта, просто задав соответствующий параметр fontWeight
, однако теперь такой подход не срабатывает, что может вызвать затруднения в разработке.
Основные Изменения в Версии 0.76
Согласно документации React Native, использование свойства fontWeight
должно позволять корректно настраивать толщину шрифта в зависимости от указанного значения. Например, использование fontWeight: '700'
должно было бы автоматически выбрать жирный шрифт, если он доступен. Однако с внедрением новой архитектуры в версии 0.76 это поведение изменилось, и вместо ожидаемого результата можно увидеть рендеринг шрифта, не соответствующий заданной толщине.
Демонстрация Проблемы
Ваш тестовый код, который использует как регулярный, так и жирный шрифты, выглядит следующим образом:
<Text
style={[
{ fontFamily: 'Chivo-Bold', fontSize: 31 },
{ fontSize: 32, lineHeight: 35, fontWeight: '700', letterSpacing: -0.5 },
]}
>
Aasd sadasdƒ Sg
</Text>
<Text
style={[
{ fontFamily: 'Chivo-Regular', fontSize: 31 },
{ fontSize: 32, lineHeight: 35, fontWeight: '700', letterSpacing: -0.5 },
]}
>
Aasd sadasdƒ Sg
</Text>
Сравнение Визуального Отображения
Сравнив изображения из версий 0.71 и 0.76, можно заметить заметные различия. В предыдущих версиях шрифты визуально соответствовали заявленным стилям и весам, тогда как в версии 0.76 наблюдаются несоответствия.
Возможные Решения
-
Уточнение Стиля: Убедитесь, что используемые вами шрифты корректно подключены и доступны в приложении. Проблемы могут возникать, если шрифт не поддерживает указанные параметры
fontWeight
. -
Явное Указание Шрифта: Попробуйте указать явные имена шрифтов вместо полагания на
fontWeight
. ИспользуйтеfontFamily: 'Chivo-Bold'
непосредственно в стиле текстового компонента, чтобы избежать конфликтов.
<Text style={{ fontFamily: 'Chivo-Bold', fontSize: 32, lineHeight: 35, letterSpacing: -0.5 }}>
Aasd sadasdƒ Sg
</Text>
- Проверка Конфигурации Проекта: Убедитесь, что в проекте правильно настроены все зависимости и нет конфликтов версий библиотек, которые могут влиять на рендеринг шрифтов.
Заключение
Обновление React Native до версии 0.76 принесло изменения, которые привели к проблемам с отрисовкой жирного текста на iOS. Следуя описанным выше рекомендациям, можно смягчить влияние этих изменений и вернуть ожидаемое поведение текстовых стилей. С течением времени можно ожидать обновлений и патчей от команды React Native, которые могут исправить возникшие проблемы.
Для более детального изучения вопросов рендеринга шрифтов желательно следить за обновлениями документации и сообществом разработчиков React Native.