컬렉션뷰로 테이블뷰처럼 만들어 사용중입니다.
셀에는 스크롤뷰를 이용해 이미지 여러개의 페이징이되는 식으로 하고있어요. 한줄에 여러이미지를 옆으로 스크롤링해서 보여주는식으로..
sdwebimage라는 오픈소스를 이용해 url을 서버에서 받고 이미지를 캐싱해서 보여주는식으로 무사히(?) 무한스크롤링이 되고있습니다.
여기서 문제는 그 한줄, 스크롤의 높이를 고정해주지 않으면 제대로 안되고있어요.
한줄에 들어갈이미지는 비율을 맞춰서 화면의 너비에 꽉차고, 그 한줄의 가장 큰 이미지의 길이 만큼 스크롤의 높이 constraint값을 주고싶지만, 영 생각처럼 되지않네요.
sd_setImage()함수엔 다운로드가 끝났을때 쓸수있는 클로져가 있어서 거기서 다운로드가 다끝나면 높이의 constraint값을 변경하도록 해줘봤었는데, 이게 영 제대로 동작을 안하네요. (다른녀석영역을 침범하기도하고..) 어떻게 해야할까요 도와주세요 ㅠ..
여차하면 이미지 다운로드 받은다음 가장 높은 높이를 캐싱한다음에 전체 컬렉션뷰를 리로드 해서 높이를 지정하면 되지 않을 까요?
현재 화면에서는 셀프 리사이징 셀은 동작하지 않을 것 같아요
머리아프네요
이미지 다운 전에 이미지 사이즈를 미리 받아쓰면 됩니다
1. 서버에서 미리 처리해서 사이즈 정보를 얻는 방법
2. 클라이언트에서 보여줄 이미지를 다운받는 동안은 화면에 표시하지 않다가 이미지 다운 받고 사이즈 정해지면 갱신하는 방법
3. 위 두가지가 무난하고 하나 받을 때마다 컬렉션뷰 리로드하는 방법도 있긴한데 그러면 화면 렌더링이 잘 안될 확률이 있어요
if image != nil {
self.loadCount += 1
imageView.image = image
let rate = image!.size.height / image!.size.width
let height = self.scroll.frame.width * rate
if self.maxHeight < height { self.maxHeight = height }
if self.loadCount >= list.count { self.scrollHeightConstraint.constant = self.maxHeight }
}
}
slideArray.append(imageView)
이상입니다.이 이후에 slideArray를 scroll에 subview로 배치해줍니다.
셀 사이즈는 따로 주지않고 자동으로 계산해주세요 라고 xcode님께 부탁드리고있습니다만
이게문제였을까요...
셀 높이와 스크롤 뷰 높이가 주요 쟁점일 거 같고, 높이 설정 부분이 우선 긍금했던건데, 셀 사이즈를 언급하시니 그 쪽 한 번 살펴 보시는 것도 좋을 것 같아요. 오토레이아웃이 적용되고 있는 지.
전체 리로드는 안해 보신것 같으니 테스트로 전체 리로드 한 번 해 보세요. 이 방법으로 해결이 되면 해당 셀만 리프레쉬하시고.
https://developer.apple.com/documentation/uikit/uicollectionviewdatasourceprefetching/prefetching_collection_view_data