2014-10-14 6 views
16

यहाँ कैसे मैं अपने टेबल निर्धारित है:, मैं - (CGSize)sizeThatFits:(CGSize)size फोन प्रोग्राम के रूप में ऊंचाई पर लौटने के लिए (जो मेरी कोशिकाओं के भीतरआईओएस 8 UITableView आत्म आकार कोशिकाओं कूद/नेत्रहीन शिफ्ट जब कोई नया दृश्य नियंत्रक धकेल दिया जाता है

self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; 
self.tableView.delegate = self; 
self.tableView.dataSource = self; 
self.tableView.estimatedRowHeight = 150; 
[self.view addSubview:self.tableView]; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath में निर्धारित किया है। मैं की कमी या autolayout का उपयोग नहीं कर रहा हूँ।

कुछ भी नहीं जटिल और मेरे ऊंचाइयों सब पूरी तरह से नेत्रहीन बाहर रखी हैं।

हालांकि समस्या यह है कि जब मैं कोई नया दृश्य नियंत्रक धक्का, कोशिकाओं कूद/पाली दृष्टि से (या तो ऊपर या नीचे)। यह अनुमानित पंक्ति ऊंचाई मानों की गणना के आधार पर कूद रहा प्रतीत होता है - फिर भी आकार बदलने से पहले प्रत्येक दृश्य कक्ष के लिए आकारफैटफिट भी कहा जाता है, इसलिए मैं वास्तव में उलझन में हूं (सुनिश्चित नहीं है कि क्यों या तो वास्तव में क्यों कहा जाना चाहिए, क्योंकि मैं छोड़ रहा हूं राय)। मैंने सामग्री की जांच की है तालिका के लिए ऑफसेट देखें - यह अपरिवर्तित है इसलिए यह समस्या नहीं है।

उत्तर

6

ठीक है, मैंने आकार में अपने सेल ऊंचाई को कैश करके, और प्रतिनिधि के भीतर अनुमानित सेल ऊंचाइयों के लिए उस मूल्य को वापस कर इसे हल किया। खूबसूरती से काम करता है।

+0

क्या आप अपने उत्तर, @vadoff पर विस्तार कर सकते हैं? मैं कामकाज का एक गुच्छा जानता हूँ, लेकिन यह नहीं। – rainypixels

+0

@rainypixels क्या आपने कभी इसे समझ लिया है? – Steve

+0

@Steve मेरे पास विकल्पों का एक गुच्छा है लेकिन मैंने एक नहीं चुना है। मैं शायद एनएससीएच का उपयोग कर ऊंचाइयों (कुंजी = सेल + अंतिम संशोधित दिनांक, मूल्य = ऊंचाई) की कैशिंग को पकड़ने के साथ जाऊंगा। मैं उम्मीद कर रहा था कि वाडऑफ़ का एक अलग/अधिक सुरुचिपूर्ण समाधान था। – rainypixels

3

त्वरित सुधार:

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.tableView.reloadData() 
} 

संपादित करें: इस और इसी तरह के मुद्दों पर घंटे खर्च करने के बाद मैं सबसे अच्छा समाधान मिल गया है सेल ऊंचाइयों को कैश और उन्हें estimatedHeightForRowAtIndexPath प्रतिनिधि विधि में वापस जाने के लिए है, समस्या के कारण होता है अनुमानित ऊंचाई वास्तव में गलत है।

मैंने टेबल व्यू (_: willDisplayCell: forRowAtIndexPath :) में डेटा को अद्वितीय आईडी के साथ एक शब्द में कुंजी के रूप में कैश किया है जब डेटा जोड़ा या अपडेट किया जाता है, तो मैं उस ऊंचाई को कैश से हटा सकता हूं और बेहतर उपयोग कर सकता हूं अनुमानित ऊंचाइयों, इसलिए केवल वह सेल अनुमानित ऊंचाई का उपयोग करता है। अब तक यह मेरे सभी कूद और स्क्रॉलिंग मुद्दों को हल करता है।

+0

महोदय, आप प्रतिभाशाली हैं! मेरे लिए अच्छा काम करता है। –

+0

जब आप नीचे स्क्रॉल करते हैं, तो तालिका दृश्य अभी भी बदल जाता है। – tounaobun

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