2013-08-10 16 views
7

मैं स्क्रॉलिंग टॉप के दौरान UITableView के शीर्ष अनुभाग (अनुभाग में 3 कक्ष) शीर्ष डाल रहा हूं।स्क्रॉल करते समय शीर्ष पर UITableView डालने वाला अनुभाग

 [_mainTable beginUpdates]; 
     [_mainTable insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; 
     [_mainTable endUpdates]; 

अनुभाग ठीक से सम्मिलित हो रहा है। लेकिन यह मुझे तालिका i.e. सेल 0 या पंक्ति 0 के शीर्ष पर ले जाता है। मैं चाहता हूं कि यह लेनदेन चिकनी हो। मैं

[_mainTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1] atScrollPosition:UITableViewScrollPositionBottom animated:NO]; 
endUpdates के बाद

सम्मिलित कर सकते हैं लेकिन क्योंकि यह फिर अचानक अपने अंतिम स्थिति तक स्क्रॉल टेबल की आप शीर्ष लेता है यह त्वरित झटका दर्शाता है।

मैं इसे कैसे चिकनी बना सकता हूं।

धन्यवाद

उत्तर

9

मैं इस पर विस्तृत परीक्षण नहीं किया है, लेकिन इस होनहार लगता है:

  1. पहचानें दिखाई कोशिकाओं में से एक की NSIndexPath
  2. इसे rectForRowAtIndexPath प्राप्त करें।
  3. तालिका के वर्तमान contentOffset प्राप्त करें।
  4. अनुभाग जोड़ें, लेकिन के बजाय reloadData पर कॉल करें (जो जारिंग स्क्रॉलिंग को रोकता है)।
  5. अद्यतन हो जाओ rectForRowAtIndexPath कि आप 2.
  6. अद्यतन contentOffset 5 कदम से परिणाम के अंतर से चरण में प्राप्त हुए और कदम की कि 2.
इस प्रकार

:

[self.sections insertObject:newSection atIndex:0]; // this is my model backing my table 

NSIndexPath *oldIndexPath = self.tableView.indexPathsForVisibleRows[0]; // 1 
CGRect before = [self.tableView rectForRowAtIndexPath:oldIndexPath];  // 2 
CGPoint contentOffset = [self.tableView contentOffset];     // 3 
[self.tableView reloadData];            // 4 
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:oldIndexPath.row inSection:oldIndexPath.section + 1]; 
CGRect after = [self.tableView rectForRowAtIndexPath:newIndexPath];  // 5 
contentOffset.y += (after.origin.y - before.origin.y); 
self.tableView.contentOffset = contentOffset;        // 6 
+1

धन्यवाद बहुत दोस्त मैं लंबे समय से इसके साथ संघर्ष कर रहा था। – Mann

+0

हालांकि उपरोक्त कोड आकर्षण की तरह काम करता है लेकिन मेरी व्यक्तिगत समझ के लिए मुझे बिंदु 5 नहीं मिला। हमें यहां पुराने आयत की आवश्यकता क्यों है? अगर आप इसे – Mann

+1

@mann को साफ़ करते हैं तो मैं बहुत आभारी रहूंगा। मैं सिर्फ यह देखने की कोशिश कर रहा था कि दृश्यमान पंक्तियों में से कितनी बार स्थानांतरित हो गई है। इसलिए मुझे सम्मिलन से पहले एक दृश्य पंक्ति के लिए आयत मिलती है और फिर, बाद में, 'सामग्री' को समायोजित करने के लिए 'y' मानों के बीच अंतर का उपयोग किया जाना चाहिए ताकि पंक्ति पहले की तरह ही दिखाई दे। – Rob

संबंधित मुद्दे