컬렉션보기를 애니메이션없이 일부 오프 스크린 셀로 스크롤하고 스크롤 한 후 해당 셀의 위치를 가져 오려고합니다. 문제는 콜렉션 뷰가 올바르게 (시각적으로) 스크롤되지만 셀 프레임은 화면 밖으로 유지된다는 것입니다. 여기 내 코드는 다음과 같습니다.UICollectionView scrollToItemAtIndexPath : 새 셀 위치 가져 오기
NSIndexPath *path = [fetchedResultsController indexPathForObject:objectInCollection];
[collectionView scrollToItemAtIndexPath:path atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
[collectionView layoutSubviews]; // or 'layoutIfNeeded', doesn't matter
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:path];
cellFrame = [cell.superview convertRect:cell.frame toView:nil]; // still not refreshed
컬렉션보기에서 즉시 스크롤이 적용되지 않도록 제안 할 수 있으므로 스크롤 적용 방법을 찾고 싶습니다.
--- UPDATE ---
컬렉션보기 이전보기 컨트롤러에있는 (그래서 코드에서 스크롤 한 후 볼 뷰 컨트롤러를 팝업).
이전 뷰 컨트롤러의 viewDidAppear:
메서드에서도 셀 프레임이 오프 스크린으로 유지됩니다. 정확하게 말하자면, [cell.superview convertRect:cell.frame toView:nil];
은 컬렉션보기의 contentOffset
없이 프레임을 반환합니다. 따라서 CGRectOffset([cell.superview convertRect:cell.frame toView:nil], 0, -collectionView.contentOffset.y)
은 화면에 올바른 셀 프레임을 반환합니다.
정확하게 문제를 이해했는지 모르겠지만 스크롤 한 후에도 동일한 프레임을 가져야합니다. 스크롤하면 하위보기의 프레임이 변경되지 않습니다. contentOffset 만 변경해야합니다. 또는 UICollectionView의 수퍼 뷰 좌표에서 프레임을 가져 오려고합니까? –