पाठ की लंबाई के आधार पर उइलैबेल चौड़ाई की गणना कैसे करें?


142

मैं एक UILabel के बगल में एक छवि प्रदर्शित करना चाहता हूं, हालांकि UILabel की चर पाठ लंबाई है, इसलिए मुझे नहीं पता कि छवि को कहां रखा जाए। मैं यह कैसे हासिल कर सकता हूं?

जवाबों:


191
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
                        constrainedToSize:maximumLabelSize 
                        lineBreakMode:yourLabel.lineBreakMode]; 

क्या है - [NSString sizeWithFont: forWidth: lineBreakMode:] के लिए अच्छा है?

इस सवाल का जवाब आपके पास हो सकता है, इसने मेरे लिए काम किया।


2014 के लिए, मैंने इस नए संस्करण में एडिट किया, जो नीचे नोरबर्ट द्वारा की गई अल्ट्रा-हैवी टिप्पणी पर आधारित है! यह सब कुछ करता है। चियर्स

// yourLabel is your UILabel.

float widthIs = 
 [self.yourLabel.text
  boundingRectWithSize:self.yourLabel.frame.size                                           
  options:NSStringDrawingUsesLineFragmentOrigin
  attributes:@{ NSFontAttributeName:self.yourLabel.font }
  context:nil]
   .size.width;

NSLog(@"the width of yourLabel is %f", widthIs);

41
बस एक नोट: यह iOS7 के बाद से पदावनत है। अब पसंदीदा तरीका है:[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
नॉर्बर्ट

17
आप आंतरिक आंतरिक संपत्ति का उपयोग भी कर सकते हैं। मैं ऑब्जेक्टिव-सी में ज्यादा नहीं हूं, लेकिन यह कुछ इस तरह होना चाहिए: self.yourLabel.intrinsicContentSize यह आपको लेबल सामग्री का आकार देगा, जिससे आप वहां से केवल चौड़ाई प्राप्त कर सकते हैं।
बोरिस

1
बस yourLabel.intrinsicContentSize.widthमहान काम करता है, नीचे जवाब की जाँच करें।
denis_lor

155

yourLabel.intrinsicContentSize.widthके लिए ऑब्जेक्टिव-सी / स्विफ्ट


मेरे लिए काम नहीं यह उनके पाठ के आधार पर लेबल की चौड़ाई की ऊंचाई की गणना नहीं कर रहा है
चांदनी

1
मेरे लिए पूरी तरह से काम करता है, कस्टम फ़ॉन्ट के साथ भी!
fl034

1
डायनामिक लेबल की चौड़ाई पाने का सही उत्तर
चेतन

52

स्विफ्ट में

 yourLabel.intrinsicContentSize().width 

3
यह उत्तर केवल उस दृश्य के लिए मान्य है जिसे निर्धारित किया गया है
रोममेक्स

33

चयनित उत्तर iOS 6 और उसके नीचे के लिए सही है।

IOS 7 में, अपदस्थsizeWithFont:constrainedToSize:lineBreakMode: किया गया है । अब इसका उपयोग करने की सलाह दी जाती है ।boundingRectWithSize:options:attributes:context:

CGRect expectedLabelSize = [yourString boundingRectWithSize:sizeOfRect
                                                    options:<NSStringDrawingOptions>
                                                 attributes:@{
                                                    NSFontAttributeName: yourString.font
                                                    AnyOtherAttributes: valuesForAttributes
                                                 }
                                                    context:(NSStringDrawingContext *)];

ध्यान दें कि वापसी मूल्य एक CGRectनहीं है CGSize। उम्मीद है कि आईओएस 7 में इसका उपयोग करने वाले लोगों के लिए यह कुछ सहायता होगी।


12

IOS8 आकार में WithFont को हटा दिया गया है, कृपया देखें

CGSize yourLabelSize = [yourLabel.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:yourLabel.font size:yourLabel.fontSize]}];

आप उन सभी विशेषताओं को जोड़ सकते हैं जो आप चाहते हैं sizeWithAttributes में। अन्य विशेषताएँ जिन्हें आप सेट कर सकते हैं:

- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName

और इसी तरह। लेकिन शायद आपको दूसरों की ज़रूरत नहीं होगी


10

स्विफ्ट 4 उत्तर जो बाधा का उपयोग कर रहे हैं

label.text = "Hello World"

var rect: CGRect = label.frame //get frame of label
rect.size = (label.text?.size(attributes: [NSFontAttributeName: UIFont(name: label.font.fontName , size: label.font.pointSize)!]))! //Calculate as per label font
labelWidth.constant = rect.width // set width to Constraint outlet

स्विफ्ट 5 उत्तर जो बाधा का उपयोग कर रहे हैं

label.text = "Hello World"

var rect: CGRect = label.frame //get frame of label
rect.size = (label.text?.size(withAttributes: [NSAttributedString.Key.font: UIFont(name: label.font.fontName , size: label.font.pointSize)!]))! //Calculate as per label font
labelWidth.constant = rect.width // set width to Constraint outlet

1
महान! पाठ के अनुसार UIButton की चौड़ाई की गणना करने के लिए सुविधाजनक है, जहां intrinsicContentSize.width हमेशा सही ढंग से काम नहीं करता है।
11

8
CGRect rect = label.frame;
rect.size = [label.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:label.font.fontName size:label.font.pointSize]}];
label.frame = rect;

2
यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी करने में सक्षम होंगे ।
विनम्र चूहा

यह उत्तर बताता है कि पाठ के अनुसार लेबल का आकार कैसे समायोजित करें। इसमें क्या समस्या है?
हनी लखानी

2

आरोन के लिंक सहित कुछ एसओ पदों पर कुछ सिद्धांतों को लागू करने के बाद मैं यहां आया हूं:

    AnnotationPin *myAnnotation = (AnnotationPin *)annotation;

    self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
    self.backgroundColor = [UIColor greenColor];
    self.frame = CGRectMake(0,0,30,30);
    imageView = [[UIImageView alloc] initWithImage:myAnnotation.THEIMAGE];
    imageView.frame = CGRectMake(3,3,20,20);
    imageView.layer.masksToBounds = NO;
    [self addSubview:imageView];
    [imageView release];

    CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
    CGRect newFrame = self.frame;
    newFrame.size.height = titleSize.height + 12;
    newFrame.size.width = titleSize.width + 32;
    self.frame = newFrame;
    self.layer.borderColor = [UIColor colorWithRed:0 green:.3 blue:0 alpha:1.0f].CGColor;
    self.layer.borderWidth = 3.0;

    UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(26,5,newFrame.size.width-32,newFrame.size.height-12)];
    infoLabel.text = myAnnotation.title;
    infoLabel.backgroundColor = [UIColor clearColor];
    infoLabel.textColor = [UIColor blackColor];
    infoLabel.textAlignment = UITextAlignmentCenter;
    infoLabel.font = [UIFont systemFontOfSize:12];

    [self addSubview:infoLabel];
    [infoLabel release];

इस उदाहरण में, मैं एक MKAnnotation वर्ग के लिए एक कस्टम पिन जोड़ रहा हूं जो पाठ आकार के अनुसार एक UILabel का आकार बदलता है। यह दृश्य के बाईं ओर एक छवि भी जोड़ता है, इसलिए आप कुछ कोड को छवि और गद्दी को संभालने के लिए उचित रिक्ति का प्रबंधन करते हुए देखते हैं।

कुंजी का उपयोग करना है CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];और फिर दृश्य के आयामों को फिर से परिभाषित करना है। आप इस तर्क को किसी भी दृष्टिकोण पर लागू कर सकते हैं।

हालाँकि हारून का जवाब कुछ काम करता है, यह मेरे लिए काम नहीं करता था। यह कहीं अधिक विस्तृत व्याख्या है कि आपको कहीं और जाने से पहले तुरंत प्रयास करना चाहिए यदि आप एक छवि के साथ अधिक गतिशील दृश्य चाहते हैं और यूआईबेल का आकार बदल सकते हैं। मैंने पहले से ही आपके लिए सभी काम किया !!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.