जवाबों:
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);
self.yourLabel.intrinsicContentSize
यह आपको लेबल सामग्री का आकार देगा, जिससे आप वहां से केवल चौड़ाई प्राप्त कर सकते हैं।
yourLabel.intrinsicContentSize.width
महान काम करता है, नीचे जवाब की जाँच करें।
चयनित उत्तर 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 में इसका उपयोग करने वाले लोगों के लिए यह कुछ सहायता होगी।
IOS8 आकार में WithFont को हटा दिया गया है, कृपया देखें
CGSize yourLabelSize = [yourLabel.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:yourLabel.font size:yourLabel.fontSize]}];
आप उन सभी विशेषताओं को जोड़ सकते हैं जो आप चाहते हैं sizeWithAttributes में। अन्य विशेषताएँ जिन्हें आप सेट कर सकते हैं:
- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName
और इसी तरह। लेकिन शायद आपको दूसरों की ज़रूरत नहीं होगी
स्विफ्ट 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
CGRect rect = label.frame;
rect.size = [label.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:label.font.fontName size:label.font.pointSize]}];
label.frame = rect;
आरोन के लिंक सहित कुछ एसओ पदों पर कुछ सिद्धांतों को लागू करने के बाद मैं यहां आया हूं:
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]];
और फिर दृश्य के आयामों को फिर से परिभाषित करना है। आप इस तर्क को किसी भी दृष्टिकोण पर लागू कर सकते हैं।
हालाँकि हारून का जवाब कुछ काम करता है, यह मेरे लिए काम नहीं करता था। यह कहीं अधिक विस्तृत व्याख्या है कि आपको कहीं और जाने से पहले तुरंत प्रयास करना चाहिए यदि आप एक छवि के साथ अधिक गतिशील दृश्य चाहते हैं और यूआईबेल का आकार बदल सकते हैं। मैंने पहले से ही आपके लिए सभी काम किया !!
[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];