2010-04-19 19 views
27

का आकार कैसे प्राप्त करें "त्वरित": मैं एनएसएसटींग का आकार (चौड़ाई) कैसे प्राप्त कर सकता हूं?एनएसएसटींग

मैं यह देखने की कोशिश कर रहा हूं कि स्ट्रिंग की स्ट्रिंग चौड़ाई यह देखने के लिए है कि यह स्क्रीन की दी गई चौड़ाई से बड़ी है या नहीं, जिस मामले में मुझे इसे "फसल" करना है और इसे "..." के साथ जोड़ना है, UILabel के सामान्य व्यवहार प्राप्त करना। स्ट्रिंग। लम्बाई एएएएएएएएएए के बाद से चाल नहीं करेगी और iiiiii में समान लंबाई है लेकिन विभिन्न आकार (उदाहरण के लिए)।

मैं फंस गया हूं।

बहुत बहुत धन्यवाद।

उत्तर

38

यह एक अलग दृष्टिकोण है। टेक्स्ट का न्यूनतम आकार पता करें ताकि वह एक से अधिक पंक्ति तक लपेट न सके। यदि यह एक पंक्ति से ऊपर लपेटता है, तो आप ऊंचाई का उपयोग कर पता लगा सकते हैं।

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]; 

300 मार्जिन के लिए एक छोटे से अंतरिक्ष के साथ स्क्रीन की चौड़ाई है:

आप इस कोड का उपयोग कर सकते हैं। यदि आप आईबी का उपयोग नहीं कर रहे हैं तो आपको फ़ॉन्ट और आकार के लिए अपने मूल्यों को प्रतिस्थापित करना चाहिए, और lineBreakMode के लिए।

अब myStringSize में height होगा जिसमें आप जो कुछ जानते हैं उसकी ऊंचाई के खिलाफ जांच कर सकते हैं केवल एक पंक्ति उच्च (उसी फ़ॉन्ट और आकार का उपयोग करके)। यदि यह बड़ा है, तो आपको टेक्स्ट को काटना होगा। ध्यान दें कि आपको इसे फिर से जांचने से पहले स्ट्रिंग में ... जोड़ना चाहिए (जोड़ना ... इसे फिर से सीमा पर धक्का दे सकता है)।

टेक्स्ट को काटने के लिए इस कोड को लूप में रखें, फिर सही ऊंचाई के लिए फिर से जांचें।

+0

बहुत बहुत धन्यवाद! आपका उत्तर सही था, और आकार को फिर से जांचने से पहले "..." को जोड़ने की चाल बुद्धिमान थी। – camilo

+5

आईओएस 7 के लिए आपको [यह जवाब] देखना चाहिए (http://stackoverflow.com/a/18951386/3965) –

+1

आईओएस 7 के बाद इसे हटा दिया गया है, आपको बाउंडिंगआरक्टविथसाइज का उपयोग करना चाहिए: .. – 7heaven

4

स्ट्रिंग को मापने के लिए आपको कोर ग्राफिक्स का उपयोग करने की आवश्यकता है, जैसा कि आपके निर्दिष्ट फ़ॉन्ट और आकार में प्रस्तुत किया गया है। पैदल यात्रा के लिए Measuring the pixel width of a string के उत्तरों देखें।

+0

नेवा के उत्तर ने चाल की। वैसे भी धन्यवाद। – camilo

10

नीचे विधि का उपयोग करें।

ऑब्जेक्टिव-सी

- (CGSize)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { 
    CGSize size = CGSizeZero; 
    if (text) { 
     CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil]; 
     size = CGSizeMake(frame.size.width, frame.size.height + 1); 
    } 
    return size; 
} 

स्विफ्ट 3,0

func findHeight(forText text: String, havingWidth widthValue: CGFloat, andFont font: UIFont) -> CGSize { 
    var size = CGSizeZero 
    if text { 
     var frame = text.boundingRect(withSize: CGSize(width: widthValue, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil) 
     size = CGSize(width: frame.size.width, height: frame.size.height + 1) 
    } 
    return size 
} 
+0

ऊंचाई + 1 क्यों? –

+0

'आकार = CGSize (चौड़ाई: ceilf (frame.width), ऊंचाई: ceilf (frame.height)) 'बेहतर है। –

+0

सवाल यह पूछ रहा है कि स्ट्रिंग की चौड़ाई कैसे प्राप्त करें।यह उत्तर स्ट्रिंग की ऊंचाई कैसे प्राप्त करें यदि आप पहले से ही इसकी चौड़ाई जानते हैं ... अच्छी जानकारी लेकिन प्रश्न का उत्तर नहीं। मुझे लगता है कि यह जवाब देने का एक बेहतर तरीका सही सवाल पूछना है और फिर इसे स्वयं जवाब देना है, इस प्रश्न के संभावित प्रश्न के साथ आपको संबंधित प्रश्न पर इंगित करना है। – mah

2
sizeWithFont:constrainedToSize:lineBreakMode 

अब मान्य नहीं है। नीचे कोड स्निपेट का उपयोग करें,

UIFont *font=[UIFont fontWithName:@"Arial" size:16.f]; 

NSString *name = @"APPLE"; 

CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}];