2012-10-03 21 views
39

नहीं दिखा रहा है मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जो कई एल्बम दिखाने के लिए UICollectionView का उपयोग करता है। आइटम ठीक दिखाते हैं, लेकिन अब मैं पहले खंड के ऊपर एक शीर्षलेख दिखाना चाहता हूं।UICollectionView शीर्षलेख

ऐसा करने के लिए, मैंने अपनी init विधि में registerNib:forSupplementaryViewOfKind:withReuseIdentifier: जोड़ा। इस तरह:

[self.collectionView registerNib:[UINib nibWithNibName:@"AlbumHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kAlbumHeaderIdentifier]; 

(। AlbumHeader नोक वर्ग AlbumHeader, जो UICollectionView का एक उपवर्ग है के एक दृश्य शामिल हैं)

उसके बाद, मैं कार्यान्वित collectionView:viewForSupplementaryElementOfKind:atIndexPath विधि:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { 
    return [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kAlbumHeaderIdentifier forIndexPath:indexPath]; 
} 

अब मुझे लगता है कि हेडर व्यू लोड करने का प्रयास करना चाहिए। लेकिन ऐसा नहीं है, पूरक दृश्य के लिए विधि को बुलाया नहीं जाता है।

मुझे क्या याद आ रही है? घंटों तक अटक गया, UICollectionView पर कई बार प्रलेखन पढ़ा है, लेकिन कुछ भी मदद नहीं करता है। कोई विचार? बस एक बात काम करने के लिए

- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

को लागू करने के तरीकों में से एक टन नहीं है ... मैं भी सीख रहा हूँ:

उत्तर

106

विधि yuf के बारे में पूछा की तलाश के बाद, मैं पढ़ें कि डिफ़ॉल्ट रूप से हेडर/पाद लेख का आकार 0,0 है। यदि आकार 0 है, तो हेडर/पाद लेख प्रदर्शित नहीं होगा।

तो आप प्रॉपर्टी के साथ आकार सेट कर सकते हैं:

flowLayout.headerReferenceSize = CGSizeMake(0, 100); 

तब सभी हेडर एक ही आकार होगा। यदि इसे प्रत्येक सेक्शन के लिए अलग होना है, तो आप निम्न विधि को कार्यान्वित कर सकते हैं, जो UICollectionViewDelegateFlowLayout प्रोटोकॉल का हिस्सा है।

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { 
    if (section == albumSection) { 
     return CGSizeMake(0, 100); 
    } 

    return CGSizeZero; 
} 

नोट ऊर्ध्वाधर में यह स्क्रॉल स्क्रॉल है कि यह वापस आ height और संग्रह दृश्य की पूरी चौड़ाई का उपयोग करता है क्षैतिज में, वापसी width और संग्रह दृश्य की पूरी ऊंचाई का उपयोग करता है।

+4

किसी को भी इस मुद्दे को चलाने के लिए, इस काम को करने के लिए, मुझे 'collectionview.footerReferenceSize' का आकार भी देना पड़ा। यकीन नहीं है कि अगर रिक आईओएस 7 विशिष्ट है ... –

+1

यह एक अविश्वसनीय टिप है। धन्यवाद एक लाख, Guido! – Fattie

+1

उस बक्षीस का आनंद लें! :) – Fattie

2

आप को लागू किया। मुझे बताओ कि यह काम करता है।

संपादित करें: क्षमा करें गलत तरीका। यह मुझे लगता है कि subclassing के लिए है। एक के बारे में मैं बात कर रहा हूँ में है UICollectionViewLayout (लेआउट वस्तु आप उपवर्ग, अपने लेआउट अनुपूरक विचारों समर्थन करता है):

- layoutAttributesForSupplementaryViewOfKind:atIndexPath: 

यहाँ देखें: https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UICollectionViewLayout_class/Reference/Reference.html#//apple_ref/occ/cl/UICollectionViewLayout

+0

यह विधि किसी भी प्रतिनिधि का हिस्सा नहीं लगती है? –

+0

@ गुइडोएच क्या आपने फ़्लोलाउट या अपने कस्टम लेआउट का उपयोग किया था? यह उत्तर कस्टम लेआउट को संदर्भित करता है। – Juguang

+0

मैंने प्रवाह लेआउट का उपयोग किया था। स्वीकृत उत्तर ने इसे हल किया, और साथ ही समझ में आता है। =) –

संबंधित मुद्दे