2013-06-14 3 views
0

저는 사전 응용 프로그램을 만들고 있는데, 그 중 하나는 정의를 "드릴 다운"할 수 있다는 것입니다. 당신은 단어를 찾는다. 당신이 이해하지 못하는 정의에 단어가 있기 때문에, 그 단어를 살짝 친다. 그러면 그 단어에 대한 정의가 앱에 표시된다. 익숙한 사람이라면 App Store에있는 iOS 사전 앱의 표준입니다.UICollectionView 레이아웃 오류

하나의 기능은 드릴 다운 할 때 각 단어를 보여주는 막대를 갖기 때문에이 가로 막대를 가로 질러 일종의 "체인"단어를 얻을 수 있다는 것입니다. 아이디어는 체인의 단어를 탭하여 단어 체인을 앞뒤로 탐색 할 수 있다는 것입니다.

이 체인을 표현하기 위해 UICollectionView와 하위 클래스 UICollectionViewController를 사용하고 있습니다. 근본적으로 단일 행을 가진 "그리드"이기 때문에, 이것은 나에게 의미가있었습니다. 스토리 보드를 사용하고 있으므로 사용자 정의 컨트롤러를 기본 뷰에 포함하고 마스터 컨트롤러와이 사용자 지정 컨트롤러 사이에서 이벤트를주고받습니다. 아주 간단합니다.

이제 사용자가 여러 단어를 탭한다고 가정 해 봅시다. UICollectionViewCells의 "체인"이 왼쪽에서 오른쪽으로 바를 때까지 가장자리를 칠 때까지 늘어납니다. UICollectionView는 UIScrollView를 기반으로하기 때문에/UIScrollView는 문제가되지 않습니다. 내 개념은 표시 할 항목 수가보기 너비를 초과하면 CollectionView는 contentView를 확장하고보기 포트의 오른쪽 가장자리에서 항목을 배치하므로 프로그래밍 방식으로보기를 스크롤하여 새로 표시 할 수 있습니다. 추가 된 항목.

다음은 편집하는 데 사용하는 코드입니다. 내가 내 서브 클래스 UICollectionViewController에 전화하는 방법입니다 :

- (void)reloadDataWithAnimation 
{ 
    [self.collectionView performBatchUpdates:^{ 
     [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; 
    } completion:^(BOOL finished) { 
      [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:model.data.count - 1 inSection:0] 
             atScrollPosition:UICollectionViewScrollPositionNone animated:YES]; 
     } 

    }]; 
} 

이것은 더 많거나 적은 내가 일반적으로 jQuery과 함께 할 것입니다 무엇을 : 나는 모델을 변경 한 후에 데이터를 다시로드를 말한다. 처음에 내가 performBatchUpdates의 사용을 다루는 질문을 찾았을 때까지 제대로 작동하지 못했고 완료 블록에 들어가야한다는 것을 깨달을 때까지 scrollToItemAtIndexPath을 수행하는 데 어려움이있었습니다.

이제 펑키 한 부분이 있습니다. 항목이 전체보기를 채우기 전에 모든 것이 잘 작동합니다. 항목이 경계를 넘어서는 처음으로 CollectionView는 아래의 항목을 행의 마지막 항목 인에 배치합니다. 보기가 단 한 줄의 높이이기 때문에 이것은 매우 이상해 보입니다. 따라서 행의 마지막 줄 아래에 주차 된 항목을 좀더 볼 수 있습니다. 대부분은 가려졌습니다. 스크롤이 발생하지 않습니다.

이 시점에서 CollectionView를 앞뒤로 스크롤하면 항목이 다시 구성되고 올바른 위치로 이동합니다. 또는 다른 항목을 추가하면 올바르게 정렬되고보기가 의도 한대로 스크롤됩니다. 연속 추가는 정상적으로 작동합니다. 그러나 왼쪽으로 스크롤 한 다음 다른 항목을 추가하면 뷰어에있는 마지막 항목 아래에 잠시 나타납니다. 그러면 뷰가 맨 오른쪽으로 스크롤되고보기가 잘못 스크롤되면 항목이 해당 항목으로 점프됩니다. 적소.

답변

0

스택 오버플로에서 아무 것도 찾을 수 없기 때문에이 질문을 게시하기 시작했지만 내 질문을 작성하는 과정에서 유사한 질문 사이드 바가 업데이트되어 비슷한 질문을 얻었습니다.

비슷한 질문 : 분명히이 문제는 애플로 알려져있다 UICollectionView cell layout is out of the collection view's bounds

.닉 스나이더 완벽하게 나를 위해 문제를 해결 게시 된 https://stackoverflow.com/a/13389461/700471

코드 : 여기

은 위의 질문에 링크 된 솔루션입니다.

편집 : 또한 결국 UICollectionViewLayout을 서브 클래 싱하고 FlowLayout을 우회하여 this tutorial으로 내 레이아웃을 만들었습니다.

관련 문제