2016-09-22 10 views
5

फिर से प्रकट होने पर स्क्रॉल स्थिति बदलता है मेरे पास एक क्षैतिज संग्रह दृश्य वाले कक्षों के साथ एक टेबलव्यू है। मेरे पास एक ही शैली के साथ कई सेल्स हैं। मान लें कि इंडेक्स पर टेबल व्यू सेल5 में एक ही शैली है (मैं dequeueReusableCellWithIdentifier में एक ही UITableViewCell सबक्लास का उपयोग कर रहा हूं)। सूचकांक 5. वह क्षैतिज संग्रह दृश्य leftwards स्क्रॉल पर tableViewCell कोUITableViewCell में एम्बेडेड UICollectionViewCell

  1. उपयोगकर्ता स्क्रॉल (मान लें कि लाल-1 और पीले-2 कोशिका अब छिपा कर रहे हैं, सियान -3 वाम-पंथी है)।
  2. उपयोगकर्ता वापस tableViewCell के सूचकांक 0. पर स्क्रॉल हालांकि यह एक अलग UITableViewCell उदाहरण है, संग्रह दृश्य ऑफसेट सूचकांक 5.

enter image description here

संक्षेप में, जब से सेल के रूप में ही करने के लिए सेट कर दिया जाता मैं टेबलव्यू सेल का पुनः उपयोग कर रहा हूं, UITableViewCell के अंदर स्क्रॉल व्यू की सामग्री ऑफसेट पिछले पुन: उपयोग किए गए सेल पर सेट की जा रही है।

क्या कोई तरीका है कि मैं इस व्यवहार को अक्षम कर सकता हूं, ताकि प्रत्येक सेल किसी अन्य सेल पर किसी भी स्क्रॉल गतिविधि के बावजूद अपना ऑफसेट बनाए रखे।

+0

आप इस के लिए एक समाधान मिला ? मुझे एक ही मुद्दे का सामना करना पड़ रहा है। – Rishab

उत्तर

0

आप UIScrollViewDelegate की पुष्टि करें और scrollViewDidEndDecelerating स्क्रॉल ऑफसेट को बचाने के लिए विधि को लागू करने और उसके बाद का उपयोग करें कि मूल बहाल करने के लिए ऑफसेट है जब आप अपने UITableView की cellForRowAtIndexPath में अपने सेल विपंक्ति ऑफसेट करने के लिए अपने सेल सेट कर सकते हैं।

1

आप अपने कस्टम सेल वर्ग के लिए निम्न विधियों में जोड़कर इस लक्ष्य को हासिल कर सकते हैं:

public func setScrollPosition(x: CGFloat) { 
    collection.setContentOffset(CGPoint(x: x >= 0 ? x : 0, y: 0), animated: false) 
} 

public func getScrollPosition() -> CGFloat { 
    return collection.contentOffset.x 
} 

और अपने तालिका दृश्य डेटा स्रोत कक्षा में निम्नलिखित:

var offsets = [IndexPath:CGFloat]() 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
    cell.setScrollPosition(x: offsets[indexPath] ?? 0) 
    return cell 
} 

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
    offsets[indexPath] = collectionCell.getScrollPosition() 
}