2017-03-29 8 views
5

フローレイアウトでUICollectionViewを使用しており、autoLayoutの制約に従って適切にセルのサイズを設定するためにcollectionViewを取得しようとしています。セルを自動サイズ設定するUICollectionViewで補助ビューが正しく配置されない

セルは意図したとおりに動作しますが、私はCollectionViewに追加する補足ビューのレイアウトに関する問題に取り組んでいます。

具体的には、私がスクロールした後で、補助レイアウトが最初に「修正」される前に、supplementaryViewの位置が間違っています(つまり、y座標が正しくありません)。

1.設定しcollectionViewLayoutの推定アイテムのサイズAutoLayoutCollectionViewCellの

let collectionView: UICollectionView = { 
    let layout = UICollectionViewFlowLayout() 
    layout.estimatedItemSize = CGSizeMake(375, 50.0) 
    layout.minimumInteritemSpacing = 0.0 
    layout.minimumLineSpacing = 0.0 
    let view = UICollectionView(frame: CGRectZero, collectionViewLayout: layout) 
    view.backgroundColor = UIColor.whiteColor() 
    view.alwaysBounceVertical = true 
    return view 
}() 

2.サブクラス:私は、セルのサイズを設定していますどのように参照するために

enter image description here

は、ここにあります

class AutoLayoutCollectionViewCell: UICollectionViewCell { 
    override func preferredLayoutAttributesFittingAttributes(layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes { 
     layoutIfNeeded() 
     layoutAttributes.bounds.size.height = systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height 
     return layoutAttributes 
    } 
} 

この時点で、すべてが意図どおりに機能することに注意してください。

次のステップは失敗するところです。なぜこれが起こるん:

3.私の質問があり、ヘッダ

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { 
return CGSizeMake(CGRectGetWidth(collectionView.frame), 30.0) 

}

ための基準サイズで提供されるものですか。これをどのように修正するには?どのように私はコレクションビュー内の補間ビューを扱うことになっていますか?それはセルのセルフサイズですか?

答えて

2

私は何を私のためにそれを解決するUICollectionViewFlowLayoutのサブクラスを作成し、以下の機能を無効にすることでした、同じ問題を抱えていた:

override func invalidationContext(forPreferredLayoutAttributes preferredAttributes: UICollectionViewLayoutAttributes, withOriginalAttributes originalAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutInvalidationContext { 
    let context = super.invalidationContext(forPreferredLayoutAttributes: preferredAttributes, withOriginalAttributes: originalAttributes) 
    context.invalidateSupplementaryElements(ofKind: UICollectionElementKindSectionHeader, 
               at: [originalAttributes.indexPath]) 
    return context 
} 
+0

おかげで多く、それは私のために働きました。 フッターのレイアウトを無効にするには 'context.invalidateSupplementaryElements(ofKind:UICollectionElementKindSectionFooter、 at:[originalAttributes.indexPath])' –

関連する問題