2009-07-21 13 views
7

मेरे पास UITableView (समूहित!) है और कोशिकाओं की दो शैलियों की ऊंचाई की गणना करने की आवश्यकता है: UITableViewCellStyleDefault और UITableViewCellStyleValue2heightForRowAtIndexPath लंबे NSStrings

यह मैं कैसे UITableViewCellStyleDefault के लिए यह करना है:

CGSize textSize = {300.f, 200000.0f}; 
CGSize size = [myTextString1 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap]; 
size.height += 30.0f; 
result = MAX(size.height, 44.0f); 

और UITableViewCellStyleValue2 के लिए:

CGSize textSize = {207.f, 200000.0f}; 
CGSize size = [myTextString2 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap]; 
size.height += 30.0f; 
result = MAX(size.height, 44.0f); 

मेरे यह मुद्दा यह है कि वे गलत ऊंचाइयों लौट सकते हैं और मुझे लगता है कि यह textSize जहां है मैं गलत संख्या का उपयोग करता हूं। लंबे ग्रंथों के साथ, नीचे का हिस्सा छोटा हो जाता है (आमतौर पर केवल कुछ शब्दों के साथ एक रेखा), और सेलस्टाइल दोनों के लिए उनके पास सेल में पाठ के ऊपर और नीचे अजीब अंतर होता है।

UITableViewCellStyleValue2 के लिए मुझे टेक्स्ट बनाने से चौड़ाई आकार (207.0f) मिला। लाल रंग लाल रंग और फिर बस बॉक्स के आकार की गणना करना। 300.0fUITableViewCellStyleDefault के लिए चौड़ाई यह है कि सेल के साथ कितना बड़ा है।

क्या किसी को पता है कि मुझे NSString के आकार की उचित गणना करने के लिए किस मूल्य का उपयोग करने की आवश्यकता है और इस प्रकार मेरी कोशिकाओं के लिए उचित ऊंचाई प्राप्त होती है?

धन्यवाद

उत्तर

9

यहां कोड है जिसका मैं उपयोग कर रहा हूं। यह एक प्रकार के सेल के लिए एक आकर्षण की तरह काम करता है। इसमें आपके आवेदन के लिए कुछ उपयोगी भाग हो सकते हैं।

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { 
AppAppDelegate *appDelegate = (AppAppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSString *Text = ([[appDelegate.myTextSectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"Text"]); 

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0]; 
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT); 
    CGSize labelSize = [Text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 
    return labelSize.height + 15;} 
+1

धन्यवाद। मैं एक ही लाइन के साथ अकेले कुछ कर समाप्त हो गया। मुझे पता चला कि मुझे वैल्यू 2 कोशिकाओं के साथ समस्याएं थीं, क्योंकि मुझे लगता है कि वे फ़ॉन्ट आकार 14 थे, जबकि वे वास्तव में 15. अपने कोड के लिए, आप जोड़ना चाहेंगे: परिणाम = MAX (labelsize.height + 15 , 44.0 एफ); बस अगर सेल खाली या कम है तो 2 लाइनें इसे 44.0f की न्यूनतम पंक्ति ऊंचाई के साथ वापस कर देगी, जो सामान्य है। यदि केवल एक पंक्ति है तो यह 44.0f से छोटी हो जाएगी। – runmad

2

जब आप अपने सेल बनाने के लिए, आप एक आप को मापने के लिए उपयोग करने के रूप में एक ही फॉन्ट का उपयोग कर रहे हैं?

मैंने this page पर ट्यूटोरियल का उपयोग किया और सब कुछ मेरे लिए काम किया। यह आपके लिए भी उपयोगी हो सकता है:

+0

हां, मैं वही फ़ॉन्ट आकार और प्रकार (बोल्ड/बोल्ड नहीं) का उपयोग करता हूं। मुझे लिंक पर एक नज़र डालेंगी और देखें कि क्या यह हल करता है और आपको बताता है। – runmad

+0

मुझे पता चला कि मैं सही फ़ॉन्ट का उपयोग नहीं कर रहा था! मुझे पता चला कि मुझे Value2 कक्षों के साथ समस्याएं थीं, क्योंकि मुझे लगता है कि वे वास्तव में फ़ॉन्ट आकार 14 थे, जबकि वे वास्तव में 15 हैं। अन्य सेल शैली को मुझे ऊंचाई की मात्रा के साथ खेलने की आवश्यकता है जो इसे टेक्स्ट ऊंचाई में जोड़ती है। – runmad

2

यह seeems आप समझ गए होंगे कि आप गलत पाठ का आकार इस्तेमाल कर रहे थे। भविष्य में इस समस्या से बचने के लिए आप शायद font और lineBreakMode लेबल के गुणों का उपयोग करना चाहें, खासकर यदि आप उन्हें बाद में सेल में बदलते हैं। इसके अलावा, पठनीयता के लिए, मैं एक नंबर लौटने से पहले ऊंचाई में जोड़ने से बचूंगा। इसके बजाय मैं कुछ इस तरह की कोशिश करेंगे:

CGSize textSize = CGSizeMake(300.0, 1979); 
CGSize size = [ myTextString1 sizeWithFont:[[ cell textLabel ] font ] 
         constrainedToSize:textSize 
          lineBreakMode:[[ cell textLabel ] lineBreakMode ]]; 

result = MAX(size.height + 30, 44.0f); 

मैं 1979 का इस्तेमाल किया क्योंकि प्रलेखन के अनुसार, एक मान नहीं करना चाहिए से बड़ा 2009

+0

धन्यवाद। हाँ, मैंने फ़ॉन्ट आकारों के लिए कुछ स्थिरांक सेट किए हैं, इसलिए यदि मैं इसे सेल के लिए बदलता हूं, तो यह हर जगह अपडेट होगा। – runmad

0

जब मेरे लिए काम कर रहा है के आधार पर constraintSize गणना करने के लिए है तालिका दृश्य की चौड़ाई:

CGSize constraintSize = CGSizeMake(tableView.frame.size.width * 0.6, 2009); 
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 
0

सबसे आसान तरीका यह है:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

CGFloat result = 10.0f; 
if(indexPath.section == 1) // here i compare the sections 
{ 
    result = 400.0f; 
} 
return result; 
} 

आपके पास मौजूद अनुभागों के आधार पर मूल्यों को वापस करें। यह आपको कस्टम पंक्ति ऊंचाई देगा।

2

आप ऊंचाई गणना करना चाहते हैं अगर ठीक से cellvalue2 के लिए आप का उपयोग करना चाहिए: [UIFont boldSystemFontOfSize:15.0f] और linebreakmode के रूप में: NSLineBreakByTruncatingTail

आप बोल्ड का उपयोग नहीं करते हैं, तो पाठ सही ढंग से भर जाएगा, लेकिन आप सही ऊर्ध्वाधर गद्दी खो देंगे ।

आपकी शेष गणना सही है।

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