2013-02-28 1 views
5

Sto provando a modificare l'altezza di un UILabel a seconda della quantità di testo nell'etichetta.UILabel non cambia altezza su setFrame

Posso calcolare la dimensione richiesta per l'etichetta ma quando provo a impostare il fotogramma UILabel non viene modificato.

Di seguito è riportato il mio codice. Anche se sostituisco size.height nell'ultima riga a qualcosa come 500 le dimensioni del telaio UILabel non cambia

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    static NSString *simpleTableIdentifier = @"GameItemCell"; 
    GameItemCell *cell = (GameItemCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GameItemCell" owner:self options:nil]; 
    cell = [nib objectAtIndex:0]; 

    GameItem* item = [_hunt.gameItems objectAtIndex: indexPath.row]; 


    cell.itemHeaderLabel.text = [NSString stringWithFormat:@"#%d - (%d pts)", indexPath.row+1, item.itemPoints]; 

    UILabel* textLabel = cell.itemTextLabel; 

    textLabel.text = item.itemText; 
    textLabel.lineBreakMode = NSLineBreakByWordWrapping; 


    CGRect frame = cell.itemTextLabel.frame; 
    CGSize textSize = { frame.size.width, 20000.0f }; 
    CGSize sizeOneLine = [@"one line" sizeWithFont:cell.itemTextLabel.font constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping]; 
    CGSize cellTextSize = [item.itemText sizeWithFont:cell.itemTextLabel.font constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping]; 
    CGSize sizeOneLineSpacing = CGSizeMake(sizeOneLine.width, sizeOneLine.height + 3); 
    NSInteger lines = cellTextSize.height/sizeOneLine.height; 
    CGSize size = CGSizeMake(frame.size.width, lines * sizeOneLineSpacing.height); 

    textLabel.frame = CGRectMake(frame.origin.x, frame.origin.y, size.width, size.height); 



    return cell; 
} 
+1

verificare se la variabile textLabel non è nil quando si tenta di impostare il suo telaio? – Vladimir

+0

Stai aggiungendo l'etichetta nella cella tableview? e controlla anche che il riferimento textLabel sia nullo (stampa textLabel usando NSLog). – Madhumitha

risposta

7

È necessario impostare la struttura del vostro marchio in GameItemCell all'interno -(void)layoutSubviews

+0

Grazie. Questo mi stava facendo impazzire e pensavo che il cambiamento fosse dovuto a GameItemCell in qualche modo. –

1

Hai perso numberOfLines proprietà da impostare.

Add:

textLabel.numberOfLines = 0; 
+0

Questa è una risposta incompleta, ma stai indicando nella giusta direzione ...... – AsifHabib

+0

@AsifHabib Non ti ho preso – Rushi

0

NumberOfLines

Il numero massimo di righe da utilizzare per il rendering del testo.

Il valore predefinito per questa proprietà è 1. di cancellare qualunque limite massimo, e utilizzare come molte linee, se necessario, impostare il valore di questa proprietà a 0.

virata un'occhiata UILabel Class Reference

secondo la vostra domanda è possibile impostare nessuna delle linee

numero Ora di righe non è impostata l'etichetta, in modo da impostarlo,

textLabel.numberOfLines = lines; 
0
CGRect labelFrame = myLabel.frame; 

labelFrame.size = [myLabel.text sizeWithFont:myLabel.font    constrainedToSize:CGSizeMake(myLabel.frame.size.width, CGFLOAT_MAX) 
           lineBreakMode:myLabel.lineBreakMode]; 

cell.textLabel.frame = labelFrame; 
2

Invece di fare tutto quel duro lavoro, provare come:

textLabel.numberOfLines = 0; 
textLabel.text = textString; 
[textLabel sizeToFit]; 

ricordare sizeToFit rispettare la larghezza etichette di default, in modo da impostare la larghezza secondo la vostra esigenza. E poi l'altezza sarà gestita dal metodo sizeToFit.

+0

Grazie comoda funzione da usare ma come LetaOn ha detto che la modifica doveva essere fatta in GameItemCell –

+0

Devi anche essere sicuro di aumentare l'altezza della cornice delle etichette. –

0

Sì, per le linee multiple utilizzano textLabel.numberOfLines = 0; in cellForRowAtIndexPath

ma ancora è necessario modificare l'altezza della cella troppo:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Calculate new cell height too as you are doing in cellForRowAtIndexPath 
    return YOUR_SIZE;; 
} 
0

Prova questa:

 NSString *text1 = shareObjC.commentText; 
     CGSize constraint1 = CGSizeMake(280 - (size.width + 5), 2000); 

     CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap]; 

     UILabel *lblComment = [[[UILabel alloc] initWithFrame:CGRectMake(posx,posy,size1.width,size1.height)] autorelease]; 

     lblComment.lineBreakMode = UILineBreakModeWordWrap; 
     lblComment.numberOfLines = size1.height/15; 
     [lblComment setFont:[UIFont systemFontOfSize:12]]; 
     lblComment.text = text1; 
     [cell.viewLikeComment addSubview:lblComment]; 
2

Alla fine avrete bisogno di mettere qualcosa come questi due metodi in la sottoclasse UITableViewCell:

// call this method on your cell, during cellForRowAtIndexPath 
// provide your resizing info (frame, height, whatever) 

- (void) updateLabelFrame:(CGRect)newLabelFrame { 
    self.resizedLabelFrame = newLabelFrame; 
    [self setNeedsLayout]; 
} 

// the actual resize happens here when UIKit gets around to it 

- (void) layoutSubviews { 
    [super layoutSubviews]; 
    self.myLabel.frame = self.resizedLabelFrame; 
}