2013-02-25 3 views
6

私は私のアプリでは、次のものを実装しようとしています:UILabelのsizeThatFitsはその高さを返しますか?

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

を私は0.0あるLabel's高さで終わります。なぜどんなアイデア?

+0

返される幅は何ですか? – Fogmeister

+0

高さは 'CGFloat'で表されるので、' nil'は意味をなさない。 – 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

sizeThatFitsは、サブビューに最も適したサイズを計算して返すようにビューに頼みます。だからあなたはあなたが何をすべきthemeLabel

の枠を設定することはありません:

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

'CGRect'を期待するプロパティに' CGSize'を割り当てることはできません。 – trojanfoe

+0

私は知っている、私はそれを修正した – peko

2

私はUILabelsのための高さを処理するためのカテゴリを作成しました:

UILabel + TCFlexibleHeight.h

#import <UIKit/UIKit.h> 

@interface UILabel (TCFlexibleHeight) 

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

@end 

U 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

うわー、ありがとう、私は間違いなくそれを試してみましょう! –

関連する問題