2010-04-23 22 views
6

मुझे पता है कि यह एक है:एनएसएसटींग से टेक्स्ट आयत की ऊंचाई की गणना कैसे करें?

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: 

लेकिन पाठ shrinked के बाद से CGSize हमेशा एक ही ऊंचाई है और किसी भी करने के लिए समायोजित नहीं करता है या जो भी, CGSize नहीं बता रही है कि कैसे अजी पाठ है।

उदाहरण: 320 x 55 अंक के साथ एक UILabel बनाएं और वहां एक loooooooooooooong टेक्स्ट डालें। लेबल को पाठ को कम करने दें। आश्चर्य: CGSize.height एक ही ऊंचाई बनी हुई है भले ही पाठ इतना छोटा हो कि आपको माइक्रोस्कोप की आवश्यकता हो।

ठीक है तो मेरे मैकबुक समर्थक के खिलाफ मेरे सिर को टक्कर देने के बाद ठीक है, जो अब आधा रास्ता टूटा हुआ है, केवल यही सोचने में मदद कर सकती है कि वह वास्तविक वास्तविक है। लेकिन फ़ॉन्ट का आकार पिका में है, मुझे लगता है, यह वास्तव में स्क्रीन पर आपको नहीं मिलता है, है ना?

जब वह फ़ॉन्ट आकार 10 है, तो मेरा पाठ वास्तव में अधिकतम 10 अंक ऊंचा है? एक बार थोड़ी देर में मैंने बिल्कुल कोशिश की, और जैसे ही पाठ में एक वाई या कुछ चरित्र था जो नीचे तक फैला हुआ था (जैसे कि y की पूंछ की तरह), यह सीमा से बाहर है और पूरा पाठ 10 अंकों से बड़ा है।

तो आप लंबी दाढ़ी और कुछ अस्पताल के अनुभव के बिना एक लाइन यूलाबेल के लिए असली टेक्स्ट ऊंचाई की गणना कैसे करेंगे?

उत्तर

2

के बाद आपको लगता है कि समारोह कॉल से वास्तविक फ़ॉन्ट आकार मिलता है की तरह लगता है, तो आप उस नए आकार के साथ फिर से फोन करने की जरूरत है:

NSString* yourString = @"SomeString"; 
float actualSize; 
[yourString sizeWithFont:yourFont 
      minFontSize:minSize 
      actualFontSize:&actualSize 
       forWidth:rectWidth 
      lineBreakMode:breakMode]; 

CGSize size = [yourString sizeWithFont:[UIFont fontWithName:fontName size:actualSize]]; 
+0

यह काम करता है। यह पृथ्वी पर सबसे कुशल चीज नहीं है, लेकिन जब तक सेब अपने बग को ठीक नहीं करता है (अपनी सांस न पकड़ें), यह काम करता है। – DougW

3

इस कोड का प्रयास करें: मेरा उत्तर से

CGSize maximumSize = CGSizeMake(300, 9999); 
NSString *myString = @"This is a long string which wraps"; 
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14]; 
CGSize myStringSize = [myString sizeWithFont:myFont 
    constrainedToSize:maximumSize 
    lineBreakMode:self.myLabel.lineBreakMode]; 

here

यह एक अलग विधि का उपयोग करता है, और एक बहुत ही उच्च CGSize शुरू में (जो तब स्ट्रिंग फिट करने के लिए सिकुड़ जाता है)

सेट
+0

अच्छा, लेकिन मैं चाहता हूं कि पाठ को धुंध में फिट करने के लिए दबाया जाए सभी आयताकार ... – dontWatchMyProfile

+0

कोशिश की, लेकिन यह काम नहीं करता है। जब लेबल लेबल द्वारा कम हो जाता है, तो ऊंचाई वही रहती है। मैंने लेबल्स फ्रेम के रेक्ट को अधिकतम आकार के रूप में प्रदान करने का भी प्रयास किया। – dontWatchMyProfile

+0

क्या आपने फ़ॉन्ट आकार को छोटा होने से रोकने के लिए 'adjustsFontSizeToFitWidth' सेट किया है? या क्या आप लेबल के साथ आकार घटाना चाहते हैं? –

1

क्या आपने label.numberOfLines = 0; सेट किया है?

+0

नहीं, लेकिन क्या करना महत्वपूर्ण है? भी, क्यों 0? क्या कम से कम 1 लाइन नहीं है? – dontWatchMyProfile

+0

यह संपत्ति दिखाए गए लाइनों की अधिकतम संभव संख्या सेट करती है।1 डिफ़ॉल्ट मान है। 0 का मतलब है कि लेबल लाइनों की संख्या को सीमित नहीं करेगा। – Skie

3

महत्वपूर्ण: आईओएस 7.0 के रूप में निम्न विधि मान्य नहीं है।

sizeWithFont: minFontSize: actualFontSize: forWidth: lineBreakMode:

उपयोग नीचे दिए गए कोड के बजाय

CGRect frame = [cellText boundingRectWithSize:CGSizeMake(568,320) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:32.0f]} context:nil]; 
float height = frame.size.height; 
0

इस कोड frame.size चल ऊंचाई और अपने NSString की चौड़ाई होगा करने के बाद बिल्कुल ..

NSString *text = @"This is my Mac"; 
textFont = [NSFont fontWithName:@"HelveticaNeue-Medium" size: 80.f]; 
textColor = [NSColor yellowColor]; 
NSDictionary *attribs = @{ NSForegroundColorAttributeName:textColor, 
          NSFontAttributeName: textFont }; 
CGRect frame = [text boundingRectWithSize:CGSizeMake(0,0) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesDeviceMetrics attributes:attribs context:nil]; 
संबंधित मुद्दे