2012-05-26 31 views
7

Ho un UILabel in un controller Vista dettagli, quindi il suo contenuto cambia in base alla riga della tabella selezionata. Ho un problema, vorrei impostare una larghezza fissa per il mio UILabel e un'altezza dinamica a seconda del testo. Come posso fare questo? (Mi dispiace per i miei errori, ma non sono inglese)UILabel con larghezza fissa e altezza flessibile

risposta

-2

Puoi farlo ... c'è un codice.

UILabel *yourlabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 100, sizeToFit)]; 
yourlabel.numberOfLines = 0; 

Per qualsiasi domanda si prega di commentare.

+0

Non posso usare sizeToFit come valore per CGRect height, Xcode non mi consente di farlo .. Si dice che è un 'identificatore non dichiarato' –

+0

Grazie Albert;) –

+0

basta controllare questo..link penso che risolverà il tuo problema. http://basheerad.blogspot.com/2011/12/dynamic-width-and-height-for-uilabel-in.html – jamil

8

Mi piace sottoclasse UILabel per fare questo per me.

AutosizingLabel.h

#import <UIKit/UIKit.h> 


@interface AutosizingLabel : UILabel { 
    double minHeight; 
} 

@property (nonatomic) double minHeight; 

- (void)calculateSize; 

@end  

AutosizingLabel.m

#define MIN_HEIGHT 10.0f 

#import "AutosizingLabel.h" 

@implementation AutosizingLabel 

@synthesize minHeight; 

- (id)init { 
    if ([super init]) { 
     self.minHeight = MIN_HEIGHT; 
    } 

    return self; 
} 

- (void)calculateSize { 
    CGSize constraint = CGSizeMake(self.frame.size.width, 20000.0f); 
    CGSize size = [self.text sizeWithFont:self.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];  

    [self setLineBreakMode:UILineBreakModeWordWrap]; 
    [self setAdjustsFontSizeToFitWidth:NO]; 
    [self setNumberOfLines:0]; 
    [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, MAX(size.height, MIN_HEIGHT))]; 

} 

- (void)setText:(NSString *)text { 
    [super setText:text]; 

    [self calculateSize]; 
} 

- (void)setFont:(UIFont *)font { 
    [super setFont:font]; 

    [self calculateSize]; 
} 

@end 

Per utilizzare questa, import/creare il file .he .m nel progetto. Poi, se si sta creando il UILabel nel codice, sarebbe simile a questa:

#import "AutosizingLabel.h" 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    AutosizingLabel *label = [[AutosizingLabel alloc] init]; 
    label.text = @"Some text here"; 
    [self.view addSubview:label]; 
} 

Se stai usando un XIB, è possibile selezionare qualsiasi UILabel e fare clic sul Inspector Identità nella barra laterale destra per impostare è classe a AutosizingLabel. In entrambi i casi, l'impostazione della proprietà .text aggiornerà automaticamente la dimensione dell'etichetta.

+0

Grazie. E poi come posso usare questa sottoclasse nel controller di visualizzazione dei dettagli per avere un'altezza dinamica per il mio UILabel? –

+0

Ho aggiornato la mia risposta con maggiori informazioni su come usarlo. –

+0

Grazie mille, ci proverò adesso. –

Problemi correlati