[ReactNative] Component | 02. ScrollView - 스크롤 만들기

2025. 12. 16. 11:04·Frontend/ReactNative

ScrollView는 콘텐츠의 길이가 모바일 기기의 화면 크기를 벗어날 때 사용자가 모든 내용을 볼 수 있도록 스크롤(Scroll)기능을 제공하는 요소입니다.

구성요소

ScrollView는 두 가지 부분으로 이루어져 있습니다.

  • Container는 스크롤할 내용을 담을 공간입니다. Container의 부모는 반드시 높이가 고정되어 있어야 하며, 전체 화면보다 커질 수 없습니다.
  • Content는 실제로 스크롤될 내용입니다. 이 부분은 전체 화면보다 커질 수 있으며, 화면을 넘어서면 스크롤 되어 내용을 확인할 수 있습니다.

이에 따라 ScrollView에 스타일을 적용할 수 있는 곳도 두 가지가 존재합니다. Container의 스타일을 적용하려면 똑같이 style 값을 을 작성하면 되지만, Content의 스타일을 적용하려면 contentContainerStyle 이라는 값을 작성해야 합니다.

<ScrollView
  style={{ flex: 1, backgroundColor: 'red' }}
  contentContainerStyle={{ padding: 16 }}
>

// tailwind를 사용하는 경우
<ScrollView
  className="flex-1"
  contentContainerClassName="px-4 py-6"
>

예를 들어 스크롤 되는 글을 가운데 정렬하고 싶다면, style이 아닌 contentContainerStyle에서 스타일 값을 지정해주어야 하는 식입니다.

// 이렇게 하면 글이 가운데 정렬되지 않음
<ScrollView style={{ 
  justifyContent: 'center',
  alignItems: 'center'
}}>

// 올바른 예시
<ScrollView contentContainerStyle={{
    justifyContent: 'center',
    alignItems: 'center',
}}>

style 값을 지정하는 대표적인 경우는 배경 색상을 변경하는 경우가 있겠습니다.

<ScrollView style={{ backgroundColor: '#fff' }}>

주의할 점

앞서 말했듯 ScrollView는 반드시 높이가 정해진(bounded) 부모 안에 있어야 스크롤 가능합니다. 아래와 같이 상위 요소에서 높이를 지정해도, ScrollView 바로 위 부모 요소의 높이가 지정되어 있지 않다면, 스크롤이 동작하지 않습니다.

<View style={{ flex: 1 }}>  // 여기서 높이를 정의해도
  <View>                    // 여기서 flex가 빠져 높이가 정의되지 않음
    <ScrollView />
  </View>
</View>

높이를 지정할 수 있는 방법은 직접 길이를 지정하는 방법과 flex를 이용하는 방법이 있는데, 전자의 경우 기종마다 화면의 크기가 달라지기 때문에 추천하는 방법이 아니라고 합니다. flex: 1 스타일을 사용하면 남는 공간을 자동으로 가져가지 때문에, 유연한 반응성을 가질 수 있습니다.

// 방법 1. 길이 지정
<ScrollView style={{ height: 500 }} />

// 방법 2. flex
<View style={{ flex: 1 }}>
  <ScrollView />
</View>

 

+) ScrollView는 한 번에 Content의 모든 내용을 랜더링하기 때문에, 내용이 많을 경우 부하가 있다는 단점이 있습니다. FlasList는 이 문제를 해결하여 화면에 보이지 않는 요소는 랜더링하지 않고, 화면에서 벗어나는 요소도 랜더링에서 제거하여 부하를 줄일 수 있습니다.

728x90

'Frontend > ReactNative' 카테고리의 다른 글

[ReactNative] Component | 01. SafeAreaView - 상태표시줄에 겹치지 않게 하기  (0) 2025.12.15
[ReactNative] dp 단위에 대하여  (0) 2025.12.15
[Expo] Expo 기본 프로젝트 구조 분석하기  (0) 2025.12.11
[Expo] Expo 프로젝트 시작하기  (0) 2025.12.10
[Expo] Expo에 대하여  (0) 2025.12.10
'Frontend/ReactNative' 카테고리의 다른 글
  • [ReactNative] Component | 01. SafeAreaView - 상태표시줄에 겹치지 않게 하기
  • [ReactNative] dp 단위에 대하여
  • [Expo] Expo 기본 프로젝트 구조 분석하기
  • [Expo] Expo 프로젝트 시작하기
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • CS (40)
        • CV (2)
        • PS (34)
      • Reveiw (18)
        • Paper (18)
        • Github (0)
      • ML (8)
        • Pytorch (5)
      • Language (59)
        • Python (8)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    ReactNative
    API
    SOLID
    review
    ML
    expo
    modal
    vscode
    PRISMA
    mongo
    Git
    GAN
    CV
    Three
    CSS
    frontend
    DB
    figma
    backend
    CS
    ts
    Express
    python
    nodejs
    js
    ps
    deploy
    postgresql
    PyTorch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[ReactNative] Component | 02. ScrollView - 스크롤 만들기
상단으로

티스토리툴바