Как работать с нестандартным шрифтом и fontWeight с реагирующим - PullRequest
0 голосов
/ 04 апреля 2020

Мне удалось загрузить пользовательский шрифт в моем приложении своей операционной системы по официальной документации :

const App = () => {
  let [fontsLoaded] = useFonts({
    'Lato-Regular': require('../assets/fonts/Lato-Regular.ttf'),
    'Lato-Bold': require('../assets/fonts/Lato-Bold.ttf'),
    'Poppins-Light': require('../assets/fonts/Poppins-Light.ttf'),
    'Poppins-Bold': require('../assets/fonts/Poppins-Bold.ttf'),
  });

Так что я могу использовать его со стилем компонента:

<Text style={{
  fontFamily: 'Lato-Bold'
}}>Home page.</Text>

Но я бы хотел использовать его так:

<Text style={{
  fontFamily: 'Lato',
  fontWeight: 'bold',
}}>Home page.</Text>

Это работает для системных шрифтов, но не для пользовательских шрифтов.

Как с этим справиться?

1 Ответ

1 голос
/ 04 апреля 2020

Вы должны использовать пользовательский компонент и извлечь из него вес шрифта. Вот так выглядит

import React from 'react';
import { View, Text as RnText, StyleSheet } from 'react-native';

const Text = ({ style, children, ...rest }) => {
  let baseStyle = styles.medium;

  // Multiple styles may be provided.
  (Array.isArray(style) ? style : [style]).forEach((style) => {
    if (style && style.fontWeight) {
      baseStyle = style.fontWeight === 'bold' ? styles.bold : styles.medium;
    }
  });

  // We need to force fontWeight to match the right font family.
  return <RnText style={[baseStyle, style, { fontWeight: 'normal' }]} {...rest}>{children}</RnText>;
};

const styles = StyleSheet.create({
  bold: {
    fontFamily: 'Lato-Bold',
  },
  light: {
    fontFamily: 'Lato-Light',
  },
  medium: {
    fontFamily: 'Lato-Black',
  },
});

export default Text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...