2016-10-19 5 views
7

또는 UICollectionViewLayout을 구현하려고합니다. layoutAttributesForItem이 호출되지 않는 방식입니다.UICollectionViewLayout 및 layoutAttributesForItem 메서드가 호출되지 않습니다.

다른 사람들은 layoutAttributesForItemself.layoutAttributesForItem에서 호출한다고 볼 수 있습니다. 난 당신이 볼 수있는 Playground 프로젝트를 만든

: this flowout 예처럼

. 전반적으로 나는 중심보기를 확대하려고합니다.

+0

하여 사용할 수 있습니다. 사용자 정의 클래스를 collectionView의 레이아웃에 올바르게 할당 했습니까? – Adeel

+0

질문 해 주셔서 감사합니다 .- 시간이 있다면,이 운동장을 보시기 바랍니다 : https://github.com/JCzz/CollectionView 전반적으로 화면 중심에서보기의 크기를 조정하려고합니다. –

+0

@ ChrisG. 동일한 문제가 있습니다. "LayoutAttributesForItem"이 전혀 실행되지 않는 것을 제외하고는 모든 것이 잘 보입니다. 이유가 확실하지 않습니다. – jnel899

답변

1

봅니다 나는 그것이 아주 사소한 질문 알고 있지만 내가 그것을 물어 감히 하위 클래스라는 UICollectionViewFlowLayout

let flowLayout = LeftAgignedFlowLayout() 
flowLayout.minimumLineSpacing = 18 
flowLayout.minimumInteritemSpacing = 8 
flowLayout.scrollDirection = .vertical 
self.collectionViewLayout = flowLayout 



class LeftAgignedFlowLayout : UICollectionViewFlowLayout {   

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 
     let arr = super.layoutAttributesForElements(in: rect)! 
     return arr.map { 
      atts in 

      var atts = atts 
      if atts.representedElementCategory == .cell { 
       let ip = atts.indexPath 
       atts = self.layoutAttributesForItem(at:ip)! 
      } 
      return atts 
     } 
    } 

    override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
     var atts = super.layoutAttributesForItem(at:indexPath)! 
     if indexPath.item == 0 { 
      return atts 

     } 
     if atts.frame.origin.x - 1 <= self.sectionInset.left { 
      return atts 

     } 
     let ipPv = IndexPath(item:indexPath.row-1, section:indexPath.section) 
     let fPv = self.layoutAttributesForItem(at:ipPv)!.frame 
     let rightPv = fPv.origin.x + fPv.size.width + self.minimumInteritemSpacing 
     atts = atts.copy() as! UICollectionViewLayoutAttributes 
     atts.frame.origin.x = rightPv 
     return atts 
    } 

} 
+0

그래서 여러분이 정말로 제안한 것은'UICollectionViewFlowLayout'에 의존하지 않고'layoutAttributesForItem (at :)'을 호출하고 콜백 할 것을 기대한다는 것입니다. :/ –

+0

@MohammadAbdurraafay 예, 우리가 customflowlayout을 사용한다면이 override 함수를 호출 할 것입니다. –

+0

이것은 인터넷에서 layoutAttributesForItem을 신속하게 찾을 수있는 가장 좋은 예입니다. –