react native flex:1 의 오류

2024. 11. 16. 15:45·React Native/공통
반응형

사이드 프로젝트의 기능 중 달력을 만드는 부분이 있었다. 달력 레이아웃은 많이 구현했기 때문에 문제가 없을 것이라고 생각했는데, 정말 예상치 못한 오류가 있었다. 

 

달력을 배치하는 부분에서 아주 미세하게 7등분으로 나눠지지 않는 문제가 있었다. 

react native에서 화면을 가득 채우는 간단한 방법은 flex 속성을 사용하는 것이다. 여기서도 복잡한 기능이 있는게 아니다. 

<Parent style={{ flex: 1 }}>
  <Children style={{ flex: 1}} />
  <Children style={{ flex: 1}} />
  <Children style={{ flex: 1}} />
  <Children style={{ flex: 1}} />
  <Children style={{ flex: 1}} />
  <Children style={{ flex: 1}} />
  <Children style={{ flex: 1}} />
</Parent>

부모 요소에게 flex: 1을 주고 자식 요소에게도 flex: 1을 주면 간단하게 해결된다. 지금까진 전혀 문제가 없었다. 

그래서 동일하게 작업을 한 결과는 다음과 같다. 

붉은 배경은 Children에 해당하는 요소에게 배경색을 줬다. 

보는 것처럼 얇은 하얀색 여백을 확인할 수 있다. 이론대로라면 꽉차서 전부 붉은 색이 되어야 하는데 어째서 이런 오류가 발생한 것일까? 

 

그 이유는 디바이스마다 픽셀의 밀도가 미세하게 다르기 때문에 이런 문제가 발생하는 것이다. 

생각해보면 100을 7로 나누면 14.2857142857라는 값이 나온다. 

하지만 이것조차 검산하면 100이 되지 않는다. 즉, 딱 떨어지는 값이 아니기 때문에 여백이 생길 수 밖에 없다고 생각한다.  그렇다면 어떤 방법으로 해결할 수 있을까 생각해봤는데, 미세하게 차이가 난다면 좌우 여백을 더 줘서 문제가 발생하지 않게 하면 되지 않을까? 생각이 들었다. 

 

그래서 부모 요소에게 padding을 좌우 0.5값을 주었다. 

그렇게 했을 때 여백이 없고 제대로 화면에 나타나는 것을 확인할 수 있다. 

이게 완벽한 방법이 아니라는 것은 나도 알고 있다. 디바이스마다 픽셀 밀도나 화면 비율이 다르기 때문에, 특정한 환경에서는 여전히 미세한 여백이 발생할 가능성이 있다. 이번 문제를 통해 단순한 Flexbox 배치라도 디바이스 특성을 고려한 세심한 처리가 필요하다는 점을 다시 한번 느끼게 되었다.

 

앞으로는 다양한 디바이스에서의 테스트를 강화하고, 반응형 레이아웃에서도 일관된 결과를 얻을 수 있는 방법을 연구해 보고자 한다. 이번 경험이 더욱 완성도 높은 UI를 만드는 데 밑거름이 될 것이라 생각한다.

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React Native > 공통' 카테고리의 다른 글

iOS 실시간 위치 정보 가져오기 - 확장판  (1) 2024.12.21
iOS 실시간 위치 정보 가지고 오기  (1) 2024.08.24
React Native 파이어베이스 배포하기  (1) 2024.08.10
[React Native] 빌드하기  (0) 2023.08.28
[React Native] 첫 프로젝트  (2) 2022.07.17
'React Native/공통' 카테고리의 다른 글
  • iOS 실시간 위치 정보 가져오기 - 확장판
  • iOS 실시간 위치 정보 가지고 오기
  • React Native 파이어베이스 배포하기
  • [React Native] 빌드하기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    네트워크
    타입스크립트
    리얼학습일기
    식물
    next.js
    webpack
    리액트
    바질
    다이소
    CCNA
    react
    영어독학
    네이버 부스트캠프
    redux
    알고리즘
    Babel
    Docker
    프로그래머스
    타일러영어
    javascript
    영어회화
    바질 키우기
    ReactNative
    CSS
    ChatGPT
    typescript
    Node.js
    덤프
    리얼클래스
    자바스크립트
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
react native flex:1 의 오류
상단으로

티스토리툴바