inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

SwiftUI - iOS14 퍼펙트 가이드

22 ScrollViewReader

ForEach 의 값을 어레이에서 받아왔는데요. 스크롤뷰리더로 감싸면 리프레쉬가 안됩니다.

274

clickdaniel

작성한 질문수 7

0

선생님^^ 스크롤뷰를 만들고 그안에

포이치로 값을 죽~ 보이게 했어요. 그 값은 모델에서 불러오는데요.

어레이에 어펜드를 하면 자동으로 스크롤뷰가 갱신이 되고 맨 아래 새로운 값이 추가되서 보이더라구요. 그런데 그 값이 화면을 넘어가면 가려져서 바로는 안보이고 손으로 스크롤을 해야 보입니다.

그래서 배운데로 스크롤뷰리더로 포이치구문을 감싸고 

scrollTo 를 이용해서 .bottom 이 되도록해서 

어레이에 새로 추가된 값이 항상 화면에 보이게 하고 싶은데요.

스크롤뷰리더를 사용하면 어레이 값을 처음에 딱 한번만 불러오고

추가로 어펜드 된 값들이 보이지를 않습니다. 왜그런 걸까요???

ios SwiftUI

답변 1

0

iOS Developer - 이정

안녕하세요

질문만 보고는 어떤 문제인지 확인이 어렵기 때문에

버튼을 누르면 데이터 추가하는 부분과

onChange를 통해서 데이터가 추가되는 순간을 캐치해서 아래로 내려가는 부분을 간단히 만들어봤습니다. 

코드 보시고 참고하시면 될 것 같습니다.

struct ContentView: View {

    struct DummyModel: Hashable {

        var number = 0

    }

    

    @State private var pxy: ScrollViewProxy?

    

    @State private var models = [DummyModel]()

    @State private var number = 0

    

    var body: some View {

        

        VStack{

            Button("Scroll To " + (self.models.last?.number.description ?? "")) {

                withAnimation(.easeInOut) {

                    pxy?.scrollTo(self.models.count - 1, anchor: .bottom)

                }

            }

            Button("add Data") {

                self.models.append(DummyModel( number: number))

                number += 1

            }

            

            ScrollViewReader(content: { proxy in

                ScrollView{

                    ForEach(0..<models.count, id: \.self) { index in

                        Text("\(models[index].number)")

                            .padding()

                    }

                }

                .onAppear(perform: {

                    self.pxy = proxy

                })

                .onChange(of: self.models, perform: { value in

                    withAnimation(.easeInOut) {

                        pxy?.scrollTo(self.models.count - 1, anchor: .bottom)

                    }

                })

            })

        }

    }

}

커스텀 팝업 사용하는 방법

0

266

1

Grid View 강의에서 animation 질문

0

371

1

iOS 16 ScrollView에서 proxy.scrollTo 오류

0

610

2

10 list section 강의 잘린건가요?

0

356

2

Conflicting arguments to generic parameter 'Content' 에러 질문

0

819

1

tickCount에러 문의

0

378

1

Picker를 사용해서 각 item별로 다른 값을 Core Data에 저장하려고 합니다.

0

234

0

강의 파일 다운로드

0

370

2

Grid강의 듣다가 궁금해서 글 남깁니다

0

269

1

sceneDelegate

0

293

1

ClockNumber 에러발생

0

385

2

강의 순서 문의

0

235

1

grid 질문 있습니다!

0

243

1

안녕하세요

0

275

1

LazeVGrid 관련 문의드립니다

0

212

1

질문 드립니다.

0

194

1

버튼과 토글에서 State관련 문의

0

245

1

UIView vs. UIViewController 질문입니다.

0

377

1

선생님. 질문드립니다.

0

289

1

앱개발하다가 궁금한 부분이 생겨서 질문 드립니다

0

265

1

기존 앱개발하다가 해당 강의를 듣는 도중 궁금한 부분이 생겨서 여쭤봅니다.

0

271

1

바인딩 값에 특정 하나의 값을 할당하기

0

284

3

1234567 곱하기 2를 계산을 하면 2.46913e+06 이렇게 나오네요???

0

282

2

iOS 버전이 바뀐건지 .center 가 안되는 이유가 뭔지 궁금합니다.

0

276

1