2013-02-25 18 views
6

Benim uygulamasında aşağıdaki şeyi uygulamaya çalışıyorum:UILabel'ın sizeThatFits yüksekliğini mi döndürüyor?

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

Ve 0.0 olduğunu Label's yüksekliği ile sonunda. Herhangi bir fikir neden?

+0

Döndürülecek genişlik nedir? – Fogmeister

+0

Yükseklik, 'CGFloat' olarak ifade edilir, dolayısıyla 'nil' anlam ifade etmez. – trojanfoe

+0

@Fogmeister, 'sizeThatFits' ve 274'ü manuel olarak ayarladığımdan sonra –

cevap

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

Teşekkürler! İşe yaradı! –

3

sizeThatFits, alt görüntülerine en uygun olanı hesaplamak ve döndürmek için görünümü sorar. Yani asla

Yapmanız gereken themeLabel

çerçevesini ayarlıyorsunuz:

UILabel + TCFlexibleHeight.h:

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

"CGSize", "CGRect" bekleyen bir özelliğe atayamazsınız. – trojanfoe

+0

Biliyorum, onu tamir ettim – peko

2

Ben UILabels için yüksekliğini işleme için bir kategori yarattı

U ILabel + TCFlexibleHeight.m: Bu kategori atfedilen dizeleri işlemek ve klibi ayarlı satır kaydırma gerektirmediğini

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

Not: kod böyle bir şey olacak bu kategoride ile

#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 

karaktere

+0

Vay, teşekkürler, kesinlikle deneyeceğim! –

İlgili konular