React Native

react native 폰트 여백 없애기

B_Tae 2023. 8. 17. 21:57

발달


전반적인 앱 리뉴얼을 진행하면서 폰트 변경 요청이 들어왔다.
그리고 요청에 맞게 변경했더니 기존 UI가 깨지는 문제가 발생했다. (android에서만)

기존에 사용하던 폰트 : NanumGothic
변경 예정에 폰트 : NotoSansKR

NotoSansKR폰트 자체에 위아래 여백이 존재하는 것 같았다. (Ios에서는 자동으로 여백을 삭제하는 것인지 여백이 없었다.)

위 사진은 단순 <Text>태그에 123을 입력한 것인데, 위 123을 보면 위아래 여백이 있어 border과 글자 사이에 간격이 넓은 것을 볼 수 있다.

해결


react-native Style에 includeFontPadding라는게 있는데 이걸 false로 지정하면 여백을 지울 수 있다.

하지만 모든 font에 적용하는 것은 귀찮기 때문에 하나의 Custom Text 컴포넌트를 만들어서 import하여 사용했다.

import React, { ReactNode } from 'react';
import { Text, TextStyle } from 'react-native';

interface TextProps {
  children?: ReactNode;
  style?: TextStyle | TextStyle[];
  ellipsizeMode?: 'tail' | 'head' | 'middle' | 'clip';
  numberOfLines?: number;
}

const CustomText = (props: TextProps) => {
  if (!props?.children) return <></>;
  if (Array.isArray(props.style)) {
    return (
      <Text {...props} style={[...props?.style, { includeFontPadding: false }]}>
        {props?.children}
      </Text>
    );
  } else {
    return (
      <Text {...props} style={{ ...props?.style, includeFontPadding: false }}>
        {props?.children}
      </Text>
    );
  }
};

export default CustomText;

추가적으로...

안드로이드 코드를 직접 수정하여 Text에 기본 스타일에 적용하려는 시도를 했었는데, 찾지 못했다. 전체 색을 수정하는 방법은 있었으나. 해당 옵션에 폰트 여백은 없어 컴포넌트를 사용했다. 혹시 방법을 아신다면 공유를 부탁드립니다....