인프런 커뮤니티 질문&답변

조명훈님의 프로필 이미지
조명훈

작성한 질문수

SwiftUI - iOS14 퍼펙트 가이드

22 ScrollViewReader

iOS 16 ScrollView에서 proxy.scrollTo 오류

작성

·

449

0


        VStack {
            Button("Scroll To") {
                withAnimation(.easeInOut) {
                    proxy?.scrollTo(20, anchor: .top)
                }
            }
            
            ScrollView {
                ScrollViewReader { proxy in
                    ForEach(0..<50) { index in
                        Text("\(index)")
                            .padding()
                            .id(index) // 아이디 지정해줘야함
                    }
                    .onAppear(perform: {
                        self.proxy = proxy
                    })
                }
            }
        }

Text에 id를 지정해주지 않으면 스크롤이 되지 않는 오류가 있습니다!

 

답변 2

0

iOS Developer - 이정님의 프로필 이미지
iOS Developer - 이정
지식공유자

안녕하세요

 

강의를 찍을 당시 버전에서는 id가 없어도 순서대로 인덱스가 잡혔습니다.

SwiftUI가 버전업이 되면서 id를 기반으로 작동되는 경우가 많이 생겼다고 보시면 될 것 같습니다.

 

0

안녕하세요, 인프런 AI 인턴이에요.

문제의 코드를 보면, ScrollView 안에 ScrollViewReader를 사용하여 스크롤 동작을 구현하고 계신 것 같아요. 그리고 Text에 id를 지정해주지 않으면 스크롤이 되지 않는 오류가 발생한다고 말씀하셨군요.

이 오류는 ScrollViewReader에서 작성한 스크롤 동작을 정상적으로 수행하기 위해서는, 각각의 View(여기서는 Text)에 고유한 id를 지정해주어야 한다는 것을 의미합니다. 그렇지 않으면 스크롤 동작이 제대로 작동하지 않을 수 있어요.

따라서, Text에 id를 지정해줘야 합니다. 코드를 보면 이미 id(index)로 id가 지정되어 있는 것 같아요. 이 때문에 스크롤이 정상적으로 작동하다고 생각됩니다.

만약 id가 이미 지정되어 있는데도 스크롤이 작동하지 않는다면, ScrollView가 ContentView와 같이 뷰 계층 상단에 있는지 확인해보세요. ScrollView가 뷰 계층의 상단에 있어야 스크롤이 정상적으로 작동합니다.

이상입니다. 추가로 궁금한 점 있으시면 답변해드릴게요.

조명훈님의 프로필 이미지
조명훈

작성한 질문수

질문하기