मेरे पास एक पृष्ठांकित, क्षैतिज स्क्रॉलिंग UICollectionView
है जहां प्रत्येक सेल दृश्य/डिवाइस स्क्रीन का आकार लेता है, और एक समय में एक सेल दिखाई देता है। मुझे एक समस्या का सामना करना पड़ रहा है जहां डिवाइस रोटेशन पर, कोशिकाएं सही नए आकार में परिवर्तित हो जाएंगी, लेकिन कोशिकाओं की स्थिति बंद हो जाएगी।घूर्णन परिवर्तनों पर UICollectionViewCells का आकार बदलना वर्तमान में दृश्यमान कक्ष
रोटेशन से पहले:
रोटेशन के बाद:
रोटेशन पर, मैं कैसे न केवल संग्रह दृश्य कोशिकाओं को ठीक से आकार बदलने लेकिन सुनिश्चित कर सकते हैं कि वर्तमान सेल दृश्यमान बनी रहती है ?
मैंने कस्टम समस्या लेआउट के बिना इस समस्या को एक बहुत ही सरल उदाहरण में उबाला है।
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return collectionView.frame.size
}
viewWillLayoutSubviews
में रोटेशन को संभालने के लिए प्रयास कर रहा है:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }
flowLayout.itemSize = collectionView.frame.size
flowLayout.invalidateLayout()
}
collectionView
फ्रेम के आकार के हिसाब कोशिकाओं के आकार की स्थापना (संग्रह दृश्य यह धारण दृश्य नियंत्रक के आकार है)
असल में, अगर मैं पर viewWillLayoutSubviews
पर कॉल करता हूं, तो itemSize
सेट करना आवश्यक नहीं होना चाहिए, क्योंकि sizeForItemAtIndexPath
को लेआउट पुनर्निर्मित होने पर कॉल किया जाएगा।
मैंने भी मैन्युअल रूप से नए itemSize सेट करने के बाद रोटेशन के दौरान पहली दिखाई सेल करने के लिए स्क्रॉल, लेकिन वह कोई सुधार से पता चलता करने की कोशिश की:
if let item = collectionView.indexPathsForVisibleItems().first {
collectionView.scrollToItemAtIndexPath(item, atScrollPosition: .CenteredHorizontally, animated: true)
}