회전 후 UICollectionView 먼저 눈에 보이는 항목을 유지하지만, 나는 다음과 같은 문제에 대한 솔루션을 찾을 수 없습니다 :내가 다른 StackOverflow의 질문에 대답을 검색
나는 플로우 레이아웃으로 UICollectionView를 사용하려고 해요을 (수직) 및 항목 크기를 화면 크기에 따라 결정합니다 (iPad의 너비 또는 가로 방향의 iPhone 너비를 활용해야 함).
UICollectionView는 세로 지향 iPhone에서는 항목의 열 하나를 표시하지만 가로 지향 iPhone에서는 2 개로 표시하려고합니다. 물론 iPad와 같이 더 많은 가로 방을 사용할 수 있다면 더 많은 열을 표시 할 수 있도록 일반화하십시오.
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
NSInteger columns = 1 + ((NSInteger)(CGRectGetWidth(self.collectionView.frame) - layout.sectionInset.left - layout.sectionInset.right + layout.minimumInteritemSpacing))/((NSInteger)(layout.minimumInteritemSpacing + 300.0 + 1.0));
layout.itemSize = CGSizeMake((CGRectGetWidth(self.collectionView.frame) - layout.sectionInset.left - layout.sectionInset.right - ((columns - 1) * layout.minimumInteritemSpacing))/columns, layout.itemSize.height);
[layout invalidateLayout];
}
이 꽤 잘 작동하고 내 전화를 회전 할 때, 내가 대신 한 두 개의 열을 표시하는 레이아웃을 볼 수
이 동작을 달성하기 위해, 나는 다음과 같은했다.하지만 UICollectionView가 회전 후에 첫 번째 보이는 항목을 유지하도록 할 수는 없습니다. 이전에 회전 한 내용으로 내용 오프셋을 설정하기 때문입니다. 레이아웃이 변경되고 UICollectionView가 가로로 두 개의 열을 표시 할 때이 새로운 내용 오프셋은 동일한 항목에 해당하지만 새 레이아웃 아래에 새로운 값을 가져야합니다.
내가 다음 코드를 사용하여 시도,하지만 난 그게 작업을 진행하게 관리하지 않았다: dispatch_after
를 사용
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
NSIndexPath *firstAddShowCellIndexPath = [[[self.collectionView indexPathsForVisibleItems] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSIndexPath *ip1 = obj1;
NSIndexPath *ip2 = obj2;
return [ip1 compare:ip2];
}] firstObject];
if (firstAddShowCellIndexPath) {
[self.collectionView scrollToItemAtIndexPath:firstAddShowCellIndexPath atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
}
}
내가 UICollectionView가 회전하는 동안 오프셋 (offset) 컨텐츠를 처리하기 위해 노력하고있다 의심, 그래서 시도조차 또는
willRotateToInterfaceOrientation
이지만 작동했지만 회전이 끝난 후 콘텐츠 오프셋을 늦게 설정하여 정말 나쁜 사용자 환경을 제공했습니다.
아이디어가 있으십니까?
감사합니다.