2012-09-26 9 views
8

उम्मीद है कि एक अपेक्षाकृत नई UIKit नियंत्रणजब रोटेशन में उचित पल एक UICollectionView के लेआउट पैरामीटर बदलने के लिए है

के लिए एक सरल सवाल मैं एक UICollectionView कोशिकाओं की एक पंक्ति है कि सटीक हैं के साथ एक viewLayout है कि है पोर्ट्रेट मोड UICollectionView की सीमा

इसलिए, जब आईपैड लैंडस्केप मोड में फ़्लिप हो जाता है, तो वह पंक्ति स्क्रीन की तुलना में लम्बी हो जाती है, जिस बिंदु पर लेआउट (लगभग) चुपचाप विफल रहता है और शिकायत करता है कि पंक्ति लम्बाई से अधिक है सीमाएं

दृश्य की विशेषताओं में हेरफेर करने का आदर्श तरीका क्या है, खासकर जब यह ViewController में घूर्णन का जवाब देने से संबंधित है?

उत्तर

3

मैं एक ही समस्या पर काम कर रहा हूं।

वर्तमान में, मेरे UICollectionViewController में UICollectionViewFlowLayout के दो उदाहरण चर हैं, प्रत्येक पोर्टेट या परिदृश्य के लिए उपयुक्त इन्सेट्स के साथ।

रोटेशन पर, मैं यह कर:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
           duration:(NSTimeInterval)duration{ 

    if (UIDeviceOrientationIsPortrait(toInterfaceOrientation)) { 
     [_itemCollection setCollectionViewLayout:_portraitLayout]; 
     [_itemCollection reloadData]; 
    } else { 
     [_itemCollection setCollectionViewLayout:_landscapeLayout]; 
     [_itemCollection reloadData]; 
    } 
} 

केवल समस्या यह है कि मैं आ रही हैं कि यह बेतरतीब ढंग से बेतरतीब ढंग से setCollectionViewLayout पर EXC_BAD_ACCESS साथ दुर्घटनाओं है।

उपरोक्त की तरह कुछ आपके लिए काम कर सकता है। मुझे यकीन नहीं है कि यह चीजों को करने का सही तरीका है या नहीं। मैंने हाल ही में UICollectionViews का उपयोग करना शुरू कर दिया है।

+4

यह मेरे लिए काम करता है। लेकिन 'setCollectionViewLayout' का उपयोग करने के बजाय मैं केवल एक आकार को संशोधित करता हूं जिसे मुझे' sizeForItemAtIndexPath' में चाहिए। इसे 'रीलोडडाटा' के परिणामस्वरूप बुलाया जाता है। –

+1

कॉल [सुपर willRotateToInterfaceOrientation: toInterfaceOrientation अवधि: अवधि] चूक गया। –