2012-11-10 4 views
12

मैं विभिन्न आइटम आकार मैंUICollectionView: विभिन्न आकार आइटम पुन: उपयोग किया आइटम

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout*)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 

    FeedItem *item = [_imagesLinkArray objectAtIndex:indexPath.row]; 
    return CGSizeMake(250, 200*item.sizeFactor); 
} 

में जो घोषित जब सेल collectionView:cellForItemAtIndexPath: आइटम में पुन: उपयोग किया जा रहा है साथ गाया जा रहा है के साथ एक संग्रह दृश्य है पर गणना नहीं कर रहा है आइटम आकार का पुन: उपयोग किया गया है और sizeForItemAtIndexPath: में निर्दिष्ट नहीं है।

कोई विचार?

+0

आप अपने collectionView साझा किया जा सका कर सकते हैं: cellForItemAtIndexPath: विधि? साथ ही, क्या यह संभव है कि सेल से आपके उपन्यासों में से एक को सेल से स्वतंत्र रूप से आकार दिया जा रहा है जिससे यह केवल सेल की तरह दिखता जा रहा है? – robhasacamera

+0

इस पर कोई प्रगति? sizeForItemAtIndexPath: जब मैं स्क्रॉल करता हूं और कोशिकाओं का पुन: उपयोग किया जा रहा है तो पुन: संकलित नहीं किया जा रहा है। – Abdo

+0

मुझे एक ही समस्या है जब मैं कोशिकाओं को स्क्रॉल करता हूं अलग-अलग संरेखण प्राप्त करता है (जैसे कोशिकाओं के बीच न्यूनतम स्थान खोना) – Qwin

उत्तर

3

एक संग्रह दृश्य UITableView से कम आइटमों को फिर से शुरू करने लगता है। अंतर्निहित मॉडल में अधिकांश परिवर्तनों के बारे में आपको संग्रह दृश्य को सूचित करना होगा, उदा। [collectionView reloadData] या [collectionView insertItemsAtIndexPaths:indexPaths] पर कॉल करके।

+1

यह उत्तर मुझे सही दिशा में इंगित करता है। 'संग्रह दृश्य' पर 'CGSize' लौटने से पहले 'reloadData' को कॉल करना: लेआउट: sizeForItemAtIndexPath' ने जादू बनाया! धन्यवाद! –

+0

सेल के प्रचार कैसे किया जाता है? –

5

ऐसा लगता है कि collectionView:layout:sizeForItemAtIndexPath: को लेआउट तैयारी पर एक बार कॉल किया जाता है, संग्रह संग्रह से पहले।

तो जब भी आप स्क्रॉल करते हैं और एक सेल को हटा दिया जाता है, तो इसे तैयारी चरण में collectionView:layout:sizeForItemAtIndexPath: द्वारा प्रदान किए गए आकार में बदल दिया जाता है। क्या आप इस विधि को कॉल करने की उम्मीद कर रहे हैं जब भी कुछ इंडेक्सपैथ वाला सेल दिखाई देता है? ताकि आप सेल आकार को गतिशील रूप से बदल सकें? ऐसा लगता है कि इस विधि का उपयोग कैसे किया जा सकता है, इसका उपयोग लेआउट तैयारी चरण में एक बार सेल के आकार को निर्धारित करने के लिए किया जा सकता है।

यदि किसी कारण से आपको आकारों को पुनः संयोजित करने की आवश्यकता है, तो आप [UICollectionViewLayout invalidateLayout] का उपयोग कर लेआउट को अमान्य कर सकते हैं।

0

आपको कस्टम लेआउट क्लास में यह फ़ंक्शन ओवरराइड करने की आवश्यकता है। यदि आप कस्टम लेआउट का उपयोग कर रहे हैं।

override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool { 
return true 
} 
0

आप सरल ओवरराइड स्क्रॉल दृश्य प्रतिनिधि

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    collectionView.collectionViewLayout.invalidateLayout() 
}