2008-11-07 18 views
9

मेरे पास एक UITableView सेल है जिसमें इसकी सामग्री (संभावित रूप से टेक्स्ट की कई पंक्तियां) के आधार पर एक परिवर्तनीय आकार होगा।क्या UITableViewCell के लिए सही आकार निर्धारित करने का कोई बेहतर तरीका है?

के बाद से यह प्रतीत होता है कि heightForRowAtIndexPath इससे पहले कि मैं सेल लेआउट कहा जाता है, मैं सिर्फ सही ऊंचाई मेरी पाठ स्ट्रिंग पर [NSString sizeWithFont] को फोन करके लगता है। के बाद ऊंचाई सेट करने का कोई बेहतर तरीका है मैंने सेल में टेक्स्ट डाला है और इसका अनुमान है कि यह वास्तव में किस आकार का होना चाहिए?

उत्तर

8

यह गूंगा ध्वनि करने के लिए उह ... "अपने सेल लेआउट इससे पहले कि आप heightForRowAtIndexPath से बाहर निकलें" जा रहा है, लेकिन ...;)

गंभीरता से, यद्यपि - ओएस ही कभी इस कॉल अगर यह आवश्यक हो जा रहा है (जैसा कि: यह सेल & को स्क्रीन पर प्रदर्शित करने वाला है), इसलिए & प्रदर्शित करने के लिए तैयार होने से इसे बर्बाद करने का प्रयास नहीं है।

नोट, आप नहीं को अपने लेआउट को अलग-अलग, तर्क-वार करना है। बस अपनी ऊंचाई के भीतर अपने [स्वयं prepLayoutForCellAtIndex: अनुक्रमणिका] पर कॉल करें ForRowAtIndexPath दिनचर्या।

यदि डेटा स्थिर है, तो आप ऊंचाई तालिका बना सकते हैं और जानकारी को कैश कर सकते हैं।

if (0 == heightTable[index]) { 
    heightTable[index] = [self prepLayoutForCellAtIndex:index]; 
} 
return (heightTable[index]); 

ओह, भले ही डाटा परिवर्तन, आप या तो विधि है कि डेटा बदल जाता है, में तालिका मूल्य या 0 के लिए स्पष्ट पुनर्गणना कर सकते हैं तो यह अगली बार यह आवश्यक है पुनर्गणना हो जाता है।

4

मैं निम्नलिखित है, आमतौर पर उपयोग करें:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { 
UITableViewCell *cell = [self tableView: tableView cellForRowAtIndexPath: indexPath]; 
return cell.bounds.size.height; 

}

ध्यान दें कि मैं तालिकाओं के लिए इस का उपयोग मैं कहाँ को पूर्व-संचित समय से आगे की पंक्तियों की एक गुच्छा, नहीं बहुत से लोगों के लिए कोशिकाओं। हालांकि, सेटिंग टेबल जैसी चीजों के लिए, जहां केवल कुछ पंक्तियां हैं, लेकिन संभवतः बहुत अलग आकार में, यह अच्छी तरह से काम करता है। बड़ी टेबल के लिए, मैं ओली के सुझाव के अनुसार कुछ करता हूं।

0

यदि आप एसएमएस.एप को उदाहरण के तौर पर देखते हैं, तो ऐप्पल एसएमएस.एप एसक्लाइट डेटाबेस में सेल की पंक्ति ऊंचाई बचाता है।

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