मैंने एक UICollectionView बनाया है, ताकि मैं साफ कॉलम में दृश्य व्यवस्थित कर सकूं। मैं चाहता हूं कि डिवाइस पर 500 स्तंभ पिक्सेल चौड़े हों।UICollectionView - डिवाइस घुमाने पर कोशिकाओं का आकार बदलना - स्विफ्ट
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let size = collectionView.frame.width
if (size > 500) {
return CGSize(width: (size/2) - 8, height: (size/2) - 8)
}
return CGSize(width: size, height: size)
}
यह काम करता है पहले लोड पर अपेक्षा के अनुरूप है, लेकिन जब मैं डिवाइस घुमाने के लिए, गणना हमेशा फिर से नहीं होता है, और विचारों डॉन:
इस लक्ष्य को हासिल करने के लिए, मैं इस समारोह के लिए बनाया अपेक्षित के रूप में हमेशा redraw नहीं है। यहाँ जब डिवाइस घुमाया जाता है के लिए अपने कोड है:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
collectionView.collectionViewLayout.invalidateLayout()
self.view.setNeedsDisplay()
}
मैं यह सोचते हैं रहा हूँ मैं कुछ पुनः बनाने का भूल गया हूँ, लेकिन मुझे यकीन है कि क्या नहीं कर रहा हूँ। किसी भी विचार बहुत आभारी हैं!
इस दृष्टिकोण का उपयोग कर आप एक अनंत लूप में प्रवेश करेंगे द्वारा:
यहाँ एक उदाहरण है। – valvoline
मुझे यकीन नहीं है कि @valvoline सही है कि इससे अनंत लूप का कारण बन जाएगा - हालांकि यह प्रदर्शन समस्याओं का कारण बन सकता है क्योंकि यह आवश्यक है जितना अधिक बार संग्रहदृश्य लेआउट को अमान्य कर रहा है। 'ViewWillTransitionToSize' का उपयोग करना बेहतर है। – JosephH
यह कोड एक अनंत लूप का कारण बनता है। यह सही जवाब नहीं होना चाहिए। – Josh