2011-08-05 19 views
11

मेरे पास एक एनएसएसटींग है, और मैं उपयुक्त यूलाबेल बनाने के लिए अपनी ऊंचाई जानना चाहता हूं।एनएसएसटींग ऊंचाई प्राप्त करें

इस

NSString *string = @"this is an example"; 
CGSize size = [string sizeWithFont:[UIFont systemFontOfSize:10.0f] 
          forWidth:353.0 
        lineBreakMode:UILineBreakModeWordWrap]; 
float height = size.height; 

ऊंचाई करने से अब 13.0 है। अगर मैं का उपयोग इस स्ट्रिंग

NSString *string = @"this is an example this is an example this is an example 
        this is an example this is an example this is an example 
        this is an example this is an example this is an example 
        this is an example this is an example this is an example 
        this is an example this is an example this is an example 
        this is an example "; 

ऊंचाई हमेशा 13.0 है (और साथ 353 चौड़ाई के रूप में, कि असंभव है) ... क्या मैं गलत कर रहा हूँ?

जोड़ें:

size.width; 

ठीक काम करता है ... तो यह है, तो lineBreakMode सही नहीं है की तरह है ... लेकिन यह है, यह नहीं है?

+0

आप स्ट्रिंग से है कि आकार ले जा रहे हैं जो। ऑब्जेक्ट, सीजीएसआईज जिसे आपने अभी बनाया है। क्या यह एक टाइपो है? –

+0

लेकिन 'sizeWithFont: forWidth: lineBreakMode' एक एनएसएसटींग (उदाहरण के लिए UILabel नहीं) लेता है ... तो यह सही है ... या नहीं? – JAA

+0

यह नहीं कहता है, प्रति कहता है, यह इस पर कार्य करता है, और आपको एक आकार देता है। तो अगर आप 'फ्लोट ऊंचाई = string.height;' को 'फ्लोट ऊंचाई = आकार' में बदलना चाहते थे।ऊंचाई; ', मुझे लगता है कि यह और अधिक समझ जाएगा। –

उत्तर

21

क्योंकि

– sizeWithFont:forWidth:lineBreakMode: 

"पाठ की एक पंक्ति के लिए कम्प्यूटिंग मीट्रिक" के लिए है, जबकि

-sizeWithFont:constrainedToSize:lineBreakMode: 

के लिए है कारण है कि आप क्या कर रहे हैं के रूप में आप उम्मीद करेंगे काम नहीं करता है "टेक्स्ट की एकाधिक पंक्तियों के लिए कंप्यूटिंग मेट्रिक्स"। documentation से: पाठ की एक पंक्ति के लिए

कम्प्यूटिंग मेट्रिक्स

– sizeWithFont: 
– sizeWithFont:forWidth:lineBreakMode: 
– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: 

कम्प्यूटिंग मेट्रिक्स पाठ की एकाधिक पंक्तियों के लिए

– sizeWithFont:constrainedToSize: 
– sizeWithFont:constrainedToSize:lineBreakMode: 

उदा बजाय -sizeWithFont:constrainedToSize:lineBreakMode: का उपयोग करके देखें

CGSize maximumLabelSize = CGSizeMake(353,9999); 

CGSize expectedLabelSize = [string sizeWithFont:label.font       
           constrainedToSize:maximumLabelSize 
            lineBreakMode:label.lineBreakMode]; 

CGRect newFrame = label.frame; 
newFrame.size.height = expectedLabelSize.height; 
label.frame = newFrame; 
+0

क्षमा करें, मैंने यहां गलत लिखा है (अब मैंने सही किया है)! बेशक, एक्सकोड में यह सही था (और लॉग 13.0 है) – JAA

+0

हाँ! यह काम करता है !! धन्यवाद!!! – JAA

+0

यह एक ऐसी विधि के लिए बहुत अधिक कोड है जो एक विधि के साथ किया जा सकता है। और मुझे एक डाउनवोट मिलता है, लॉल। –

1

Documentation

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

आप उपयोग करने के लिए करना चाहिए - [NSString sizeWithFont: constrainedToSize: lineBreakMode:] समान व्यवहार है, लेकिन आप आकार में पारित कर दिया में ऊंचाई के रूप में CGFLOAT_MAX uuse कर सकते हैं