2017-04-20 2 views
-1

UICollectionView에 Collection 셀을 표시하는 방법을 알고 있습니다. 하지만 셀을 표시하기 위해 사용자 정의 레이아웃을 사용하고 싶습니다.Ios에서 UICollectionView의 사용자 지정 레이아웃을 설정하는 방법

내 모음에는 셀의 너비가 고정 된 두 개의 열이 있어야하지만 셀의 높이는 레이블의 콘텐츠 크기에 따라 다를 수 있습니다.

하지만 어떻게해야할지 모르겠다.

Layout Example

아래의 그림과 같이 내가 신속한에서 그것을 구현하고 싶습니다 나는 셀 모음을 표시합니다.

+0

정확히 무엇을이 긴 튜토리얼 https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest –

답변

0

이 기능을 사용하여 셀의 높이와 너비를 원하는대로 변경할 수 있습니다.

FUNC의 collectionView (_ collectionView : UICollectionView 레이아웃 collectionViewLayout : UICollectionViewLayout, sizeForItemAtIndexPath indexPath : IndexPath) -> CGSize {}

0
  1. UICollectionViewLayout 클래스 정의를 액세스 할 indexPath를 사용
  2. 보기 컨트롤러가 모든 셀의 높이를 계산하도록 프로토콜을 정의하십시오.
  3. 보기 컨트롤러를 위임자로 설정하십시오.
  4. 대리자 메서드에서 각 셀의 동적 높이를 알아야합니다.
  5. 레이아웃 하위 클래스에서 각 셀의 높이에 대한 대리자 메서드를 호출하고 각 셀에 대한 사용자 지정 UICollectionViewLayoutAttributes 인스턴스를 생성하는 재정의 준비 함수입니다.
  6. 재 계산을 피하기 위해 더 나은 성능을 위해 이러한 UICollectionViewLayoutAttributes 인스턴스를 배열에 저장해야 할 수도 있습니다. (이 단계는 UICollectionView 프리 페치가 비활성화 된 경우에만 유용합니다.)
  7. 지정된 사각형 내부의 모든 항목에 대한 레이아웃 특성을 반환하는 layoutAttributesForElements 함수를 재정의합니다.
  8. 일부 자동 레이아웃을 수행하기 위해 사용자 지정된 UICollectionViewCell에 해당 UICollectionViewLayoutAttributes 인스턴스를 적용하십시오.
  9. UICollectionViewLayoutAttributes 하위 클래스에서 copy 및 isEqual 함수를 재정의합니다. 속성의 객체를 내부적으로 복사 할 수 있으므로 UICollectionViewLayoutAttributes의 하위 클래스는 NSCopying 프로토콜을 준수해야합니다. 하위 클래스의 사용자 정의 속성 (예 : 레이블의 높이)을 비교하려면 isEqual을 구현해야합니다.
+0

감사합니다, 나는 따라 않았다을에 대해 당신이 언급에, 내가 기대하고 무엇처럼 ,하지만 지금은 특정 셀을 삭제 (특정 배열 요소를 삭제하고 collectionView를 다시로드) 할 때 문제가 발생합니다. 'UICollectionView는 존재하지 않는 인덱스 경로가있는 셀에 대한 레이아웃 속성을받은 것과 같은 오류가 발생합니다. {length = 2, path = 0 - 4} ' –

+0

이 방법으로 내 앱을 코딩했습니다. 셀을 삭제 한 후에도 앱이 중단되지 않습니다. 어쩌면 테스트를 위해 속성 캐시 배열을 사용하지 못하게 할 수 있습니다. – benoitcn

관련 문제