2013-02-25 114 views
6

मैं अपने ऐप्लिकेशन में निम्न बात लागू करने के लिए कोशिश कर रहा हूँ:क्या यूलाबेल का आकारटाटफिट अपनी ऊंचाई लौटाता है?

themeLabel = [[UILabel alloc] init]; 
themeLabel.backgroundColor = [UIColor redColor]; 
themeLabel.text = themeString; 
[themeLabel sizeThatFits:CGSizeMake(274, 274)]; 
themeLabel.numberOfLines = 0; 
[topThemeView addSubview:themeLabel]; 

NSLog(@"Height is %f ", themeLabel.frame.size.height); 

[themeLabel setFrame:CGRectMake(leftMargin, mainScrollView.frame.origin.y + topPadding, 274, themeLabel.frame.size.height)]; 

और मैं Label's ऊंचाई है कि है 0.0 साथ खत्म। कोई विचार क्यों?

+0

लौटाई जाने वाली चौड़ाई क्या है? – Fogmeister

+0

ऊंचाई को 'CGFloat' के रूप में व्यक्त किया जाता है, इसलिए' शून्य 'समझ में नहीं आता है। – trojanfoe

+0

@Fogmeister इसे 'sizeThatFits' का उपयोग करने के बाद 0.0 और मैन्युअल रूप से सेट करने के बाद 274 –

उत्तर

4
themeLabel = [[UILabel alloc] init]; 
themeLabel.backgroundColor = [UIColor redColor]; 
themeLabel.text = themeString; 
themeLabel.numberOfLines = 0; 

CGRect labelFrame = CGRectMake(leftMargin, mainScrollView.frame.origin.y + topPadding, 0.0, 0.0); 
labelFrame.size = [themeLabel sizeThatFits:CGSizeMake(274, 274)]; 

[themeLabel setFrame:labelFrame]; 
[topThemeView addSubview:themeLabel]; 
+0

तय किया है धन्यवाद! इसने काम कर दिया! –

3

आकारटैटफिट दृश्य को गणना करने और उस आकार को वापस करने के लिए कहता है जो इसके सबव्यूज़ के लिए उपयुक्त है। तो तुम कभी नहीं themeLabel

के फ्रेम

आपको क्या करना चाहिए सेट कर रहे हैं:

UILabel + TCFlexibleHeight.h:

themeLabel.numberOfLines = 0; 
CGSize size = [themeLabel sizeThatFits:CGSizeMake(274, 274)]; 
themeLabel.frame = (CGRect) {0,0, size}; 
+1

आप 'CGSize' को ऐसी संपत्ति में असाइन नहीं कर सकते जो' CGRect' की अपेक्षा करता है। – trojanfoe

+0

मुझे पता है, मैंने इसे – peko

2

मैं UILabels के लिए ऊंचाई से निपटने के लिए एक श्रेणी बनाई

#import <UIKit/UIKit.h> 

@interface UILabel (TCFlexibleHeight) 

- (CGFloat)heightForText:(NSString*)text; 
- (CGFloat)heightForCurrentText; 
- (CGFloat)adjustHeightForCurrentText; 

@end 

यू ILabel + TCFlexibleHeight.m:

[themeLabel setFrame:CGRectMake(leftMargin, mainScrollView.frame.origin.y + topPadding, 274, [themeLabel heightForCurrentText])]; 

ध्यान दें कि इस श्रेणी के लिए जिम्मेदार ठहराया तार संभाल नहीं करता है और पंक्ति लपेटना क्लिप करने के लिए सेट की आवश्यकता होती है:

#import "UILabel+TCFlexibleHeight.h" 

static const NSInteger kMaxLines = 1000; 

@implementation UILabel (TCFlexibleHeight) 

- (CGFloat)heightForText:(NSString*)text { 
    if (text == nil) { 
     return 0; 
    } 

    NSInteger numberOfLines = self.numberOfLines > 0 ? self.numberOfLines : kMaxLines; 
    CGSize size = CGSizeMake(self.frame.size.width, self.font.lineHeight * numberOfLines); 
    return [text sizeWithFont:self.font constrainedToSize:size lineBreakMode:self.lineBreakMode].height; 
} 

- (CGFloat)heightForCurrentText { 
    return [self heightForText:self.text]; 
} 

- (CGFloat)adjustHeightForCurrentText { 
    CGFloat height = [self heightForCurrentText]; 
    CGRect frame = self.frame; 
    frame.size.height = height; 
    return height; 
} 

@end 
इस श्रेणी के लिए अपने कोड कुछ इस तरह हो जाएगा

चरित्र के लिए।

+0

वाह, धन्यवाद, मैं निश्चित रूप से इसे आज़मा दूंगा! –