2017-03-29 13 views
5

Akış Düzeni ile bir UICollectionView kullanıyorum ve AutoLayout kısıtlamalarına göre hücreleri uygun şekilde boyutlandırmak için collectionView'ı almaya çalışıyorum.Otomatik boyutlandırma hücreleriyle birlikte UICollectionView, ek görünümü hatalı olarak konumlandırıyor

Hücreler amaçlandığı gibi çalışırken, CollectionView'a eklediğim ek görünümlerin düzeniyle ilgili sorunlara koşuyorum. Özellikle, kaydırmadan sonra 'düzeltme' yapmadan önce, ek Görünümü, ilk düzende yanlış konumda (yani y kökü yanlıştır) olacaktır.

1. Set collectionViewLayout tahmini öğe boyutunu AutoLayoutCollectionViewCell ait

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. Kullanım alt sınıflarını: benim cep boyutlandırma yapılandırılması am nasıl Başvuru için

enter image description here

, burada

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

Bu noktada, her şeyin amaçlandığı gibi çalıştığını unutmayın.

Bir sonraki adım, başarısız olduğumuz yerdir. Bunun nedeni nedir:

3.

bir başlık

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

}

Benim sorum için bir referans boyutu sağlayın? Bunu düzeltmek için nasıl alabilirim? Hücreleri kendi kendine boyutlandıran bir koleksiyondaki ek görünümleri nasıl ele alacağım? çok, benim için çalıştı

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 
} 

cevap

2

Ben UICollectionViewFlowLayout alt sınıf ve aşağıdaki işlevi geçersiz kılmak için ne benim için çözüldü aynı problem vardı. Altbilgi düzenini geçersiz kılmak için: `context.invalidateSupplementaryElements (ofKind: UICollectionElementKindSectionFooter, at: [originalAttributes.indexPath])`
+0

Teşekkür: –

İlgili konular