2013-02-25 15 views
6

Próbuję realizować następujące rzeczą w moim app:Czy rozmiar UILabelThatFits zwraca jego wysokość?

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

I skończyć z wysokości Label's że jest 0.0. Jakieś pomysły, dlaczego?

+0

Jaka jest szerokość, która zostanie zwrócona? – Fogmeister

+0

Wysokość wyrażana jest jako 'CGFloat', więc' nil' nie ma sensu. – trojanfoe

+0

@Zmień, że to 0.0 po użyciu "sizeThatFits" i 274 po ustawieniu go ręcznie –

Odpowiedz

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

Dzięki! Zadziałało! –

3

sizeThatFits prosi o widok, aby obliczyć i zwrócić rozmiar, który najlepiej pasuje do jego podobrazów. Więc nigdy ustawiania ramę themeLabel

należy zrobić:

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

Nie można przypisać 'CGSize' do właściwości, która oczekuje' CGRect'. – trojanfoe

+0

Wiem, naprawiłem to – peko

2

stworzyłem kategorię wysokość dla UILabels MANIPULACJA:

UILabel + TCFlexibleHeight.h:

#import <UIKit/UIKit.h> 

@interface UILabel (TCFlexibleHeight) 

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

@end 

U ILabel + TCFlexibleHeight.m:

#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 

z tą kategorią Twój kod będzie coś takiego:

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

Zauważ, że ta kategoria nie obsługuje przypisywane ciągi i wymagają zawijania linii ustawiony clip do postaci.

+0

Wow, dzięki, na pewno spróbuję! –

Powiązane problemy