0

클라이언트 응용 프로그램의 고급 레이아웃 요구 사항을 처리하기 위해 사용자 지정 UICollectionViewLayout을 개발했습니다. 실제로 제대로 작동하는 것 같습니다. 애니메이션을 사용하기 시작할 때까지는.사용자 지정 UICollectionViewLayout 애니메이션 문제

문서를 작성하고 좀 더 유연하게 만들려면 다소 시간이 걸렸으니 여기에서 찾으실 수 있습니다 : https://github.com/liamnichols/LNCollectionViewPagedLayout.

콘텐츠가 두 페이지에 걸쳐 잘리지 않는 것을 확인하기 위해 이전 페이지에 맞지 않을 경우 콘텐츠를 새로운 페이지로 이동하여 확인합니다.

애니메이션 문제가있는 곳에서 처음 발견되었지만 원래는 애니메이션을 사용할 필요가 없었으므로 이제 조사/수정을 시도하지 않았습니다. 이제는 UICollectionViewCell이 더 많은 콘텐츠를 애니메이션 메서드 (reloadRowsAtIndexPaths:, performBatchUpdates:completion: 요법) 어떤 형식을 사용하려고 시도합니다. 난 항상 이상한 동작 (크래시 (view argument is nil)에서 엉망이 된 레이아웃에 이르기까지).

현재 내 레이아웃은 ... 다음은 적합 여부 등됩니다 있는지 확인하기 위해 몇 가지 논리를 실행하는 각 셀의 크기에 대한 위임을 요청하여 prepareLayoutUICollectionViewLayoutAttributes의 사전을 만들어 작동

layoutAttributesForElementsInRect: 메서드가 호출되면 사전에 쿼리하고 해당 rect와 관련된 특성 배열을 가져올 수 있습니다.

우선이 레이아웃을 만드는 가장 좋은 방법은 무엇입니까? 필자의 요구를 충족시키기 위해 커스텀 레이아웃을 만드는 것에 관한 문서를 찾는 것이 매우 어려웠고, 무엇을 해야할지에 대한 다른 오픈 소스 라이브러리를 찾았습니다.

둘째, 올바르게 사용하는 방법을 알 수 없으므로 초기/최종 레이아웃 특성 메서드를 구현하지 않았습니다. 이것이 내가 이슈를 가지고 있거나 선택 사항 인 이유입니까?

UICollectionViewLayouts을 올바르게 작성하는 데 도움이나 조언이 필요합니다.

답변

1

확장 셀 (또는 일반적으로 크기를 변경하는 셀)과 관련하여이 대답은 may be helpful입니다. 짧은 대답은 initialLayoutAttributesForAppearingItemAtIndexPath:의 기본 구현 (일반적으로 모든 초기/최종 레이아웃 특성 메서드)이 항상 올바른 프레임을 반환하지 않는다는 것과이 메서드를 재정의하고 오류를 수정해야한다는 것입니다.

이러한 유형의 문제를 디버깅하는 것은 매우 간단합니다.

- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    UICollectionViewLayoutAttributes *attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:itemIndexPath]; 
    NSLog(@"indexPath=%@, attributes=%@", itemIndexPath, attributes); 
    return attributes; 
} 

과 같이 반환되는 속성을 기록하고 프레임이 잘못된시기를 확인하십시오. 거기에서 오류를 수정하는 방법을 찾을 수 있습니다. 그게 더 자세한 내용을 알지 않고도 얻을 수있는만큼 자세한.

+0

포인터를 주셔서 감사합니다. initialLayoutAttributes 메소드를 살펴보고 어떻게되는지 확인하겠습니다. – liamnichols

+0

디버깅 요령이 contentView가 CGPointZero가 아니었을 때 collectionView의 경계를 읽는 것을 도왔다.이 오류로 인해 내 레이아웃이 손상되어 크래시가 발생했다. 도움말 주셔서 감사합니다. – liamnichols

관련 문제