मैंने पाया है कि स्क्रॉलिंग viewWillAppear
मज़बूती से काम नहीं कर सकती क्योंकि संग्रह दृश्य समाप्त नहीं हुआ है यह अभी तक लेआउट नहीं है; आप गलत आइटम पर स्क्रॉल कर सकते हैं।
मैंने यह भी पाया है कि स्क्रॉल viewDidAppear
करने से अनियंत्रित दृश्य के एक क्षणिक फ़्लैश का कारण दिखाई देगा।
और, यदि आप हर बार स्क्रॉल करते हैं viewDidLayoutSubviews
, तो उपयोगकर्ता मैन्युअल रूप से स्क्रॉल करने में सक्षम नहीं होगा क्योंकि कुछ संग्रह लेआउट आपके द्वारा स्क्रॉल किए जाने पर सबव्यू लेआउट का कारण बनते हैं।
यहाँ मैंने पाया कि मज़बूती से काम करता है:
उद्देश्य सी :
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
// If we haven't done the initial scroll, do it once.
if (!self.initialScrollDone) {
self.initialScrollDone = YES;
[self.collectionView scrollToItemAtIndexPath:self.myInitialIndexPath
atScrollPosition:UICollectionViewScrollPositionRight animated:NO];
}
}
स्विफ्ट:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if (!self.initialScrollDone) {
self.initialScrollDone = true
self.testNameCollectionView.scrollToItem(at:selectedIndexPath, at: .centeredHorizontally, animated: true)
}
}
initialScrollDone
ध्वज का उपयोग करने पर जोर दूंगा जैसा कि लेनक ने किया है क्योंकि यह विधि एक से अधिक बार कॉल की जाएगी और अगर आप स्क्रॉलटॉइटमएटइंडेक्सपैथ कहते हैं: एक बार से अधिक यह संग्रह दृश्य रेंडर करने के लिए लगता है (आईओएस सिम्युलेटर आईफोन 5 (आईओएस 8)