react native,

Adaptive & Responsive UIs

Dahna Dahna Follow Aug 13, 2024 · 2 mins read
Adaptive & Responsive UIs
Share this

Adaptive & Responsive UIs (Building Cross-Platform & Device User Interfaces)

동적 너비 설정하기

  • maxWidth, minWidth 등을 사용해서 크기에 따라 반응하도록 설정(부모 컨테이너가 기준)

Dimensions API

  • import해서 react-native로부터 Dimensions 불러오기 : JavaScript 객체라서 styles를 포함한 JavaScript코드 어디에서나 정보 추출을 위해 사용할 수 있다.
  • get 메서드를 통해 화면의 치수를 지님
  • 안드로이드에서 screen은 상태표시줄 포함, window는 제외한 사이즈
  • padding: deviceWidth < 450 ? 12 : 24 : deviceWidth가 450픽셀보다 작으면 padding 값으로 12 아니면 24
  • 이미지 크기 조정 가능
  • 하드 코딩은 앱이 어떤 크기의 화면에서 실행될지 모르기 때문에 좋은 방식이 아님

화면 방향에 따라 크기를 동적으로 설정하기

  • app.json에 "orientation": "portrait" 방향이 세로로 잠겨 있음 default로 변경하고 재실행
  • Dimensions API 사용의 한계점 : 처음으로 구문 분석되어 실행될 때 단 한 번만 실행됨
    게임을 시작한 후에 화면 방향을 조정하면 아래에 있는 코드는 재실행되지 않는다.
    사용중에 방향 전환을 하는 경우는 사용하지 않는 게 나을 수 있음
  • 반응형 코드를 작성하는 것이 좋다
  • 기기의 방향이나 크기가 변결될 때 반응해야 하는 코드는 여러번 실행되기 때문에 모두 컴포넌트 함수로 가야 함
  • useWindowDimensions : recat-native에서 제공하는 기기의 크기나 치수가 바뀔 때 반응할 수 있는 Hook

KeyboardAvoidingView를 통해 화면 콘텐츠 관리하기

  • 가로화면에서 iOS 키보드가 닫히지 않는 문제 -> import KeyboardAvoidingView
  • 키보드가 열릴 때마다 입력 요소 및 다른 요소가 화면 위로 올라가 키보드가 열려도 액세스 할 수 있다.
  • behavior prop을 설정해줘야 작동함
  • 효과적으로 이동시키기 위해 스크롤이 가능한 컨테이너 안에 넣기 -> KeyboardAvoidingView를 ScrollView로 감싼다.

가로 모드 UI 개선하기

  • 디자인이 다른 가로형 UI를 따로 작성하기

Platform API를 통해 특정 플랫폼용 코드 작성하기

  • react native에서 제공, import하기
  • 삼항식 사용법 : borderWidth: Platform.OS === 'android' ? 2 : 0 : android면 borderWith를 2, 아니면 0
  • select 메서드 사용 : borderWidth: Platform.select({.ios: 0, android: 2 })
  • 플랫폼별 파일 작성하기 : import 패스는 플랫폼명 포함하지 않음 (ex : ../components/ui/Title)

상태 바 스타일링하기

import {StatusBar} from 'expo-status-bar'

컴포넌트가 2개 이상일 때 fragment로 감싸는 이유
항상 단일한 루트 엘리먼트를 반환해야 하기 때문
불필요한 DOM요소를 추가하지 않고 여러 컴포넌트를 그룹화할 수 있다.
불필요한 DOM 요소가 많아지면 브라우저가 DOM 트리를 더 많이 관리해야 하므로, 성능에 영향을 줄 수 있다. 또한, 스타일링과 레이아웃 관리 측면에서 복잡도가 증가할 수 있다. 따라서 가능하면 불필요한 DOM 요소 생성을 피하는 것이 좋다.

Dahna
Written by Dahna Follow
Hi, I am Dahna, the author of this blog!