2013-02-28 15 views
5

Ich versuche, die Höhe eines UILabel je nachdem, wie viel Text in der Bezeichnung ist zu ändern.UILabel ändert nicht die Höhe auf setFrame

Ich kann die Größe für das Etikett berechnen, aber wenn ich versuche, den UILabel Rahmen zu setzen, ändert es sich einfach nicht.

Unten ist mein Code. Auch wenn ich Size.height in der letzten Zeile zu so etwas wie 500 die Größe des UILabel Rahmen ersetzen nicht ändert

- (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

überprüfen, ob Ihre textlabel Variable ist nicht gleich Null, wenn Sie versuchen, die festlegen Rahmen? – Vladimir

+0

Fügen Sie das Label in der Tabellenansichtszelle hinzu? und überprüfen Sie auch TextLabel-Referenz ist Null (Print TextLabel mit NSLog). – Madhumitha

Antwort

7

Sie müssen den Rahmen Ihres Etiketts in GameItemCell Set innerhalb -(void)layoutSubviews

+0

Dank. Das war ich verrückt und ich dachte, die Änderung in GameItemCell irgendwie gemacht hatte. –

1

Sie numberOfLines Eigenschaft festlegen verpasst haben.

Anzahl:

textLabel.numberOfLines = 0; 
+0

Dies ist unvollständige Antwort, aber Sie zeigen in die richtige Richtung ...... – AsifHabib

+0

@AsifHabib Ich habe Sie nicht – Rushi

0

NumberOfLines

Die maximale Anzahl der Zeilen für das Rendering Text zu verwenden.

Der Standardwert für diese Eigenschaft ist 1. jede maximale Grenze zu entfernen, und so viele Zeilen verwenden je nach Bedarf, stellen Sie den Wert dieser Eigenschaft auf 0

tack einen Blick UILabel Class Reference

entsprechend Ihrer Frage können Sie nicht von Linien

Jetzt Anzahl der Zeilen gesetzt ist nicht auf dem Etikett festgelegt, so setzen Sie ihn,

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

Statt all diese harte Arbeit zu tun, versuchen Sie es mögen:

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

erinnern sizeToFit Ihre Etiketten Standardbreite respektieren, Breite so eingestellt entsprechend Ihrer Anforderung. Und dann wird die Höhe von der sizeToFit Methode verwaltet.

+0

Dank praktische Funktion zu verwenden, aber als LetaOn die Änderung gesagt hat, benötigt in GameItemCell –

+0

Sie auch Sie die Höhe des Etiketten Rahmen erhöhen, um sicherzustellen, vorgenommen werden müssen. –

0

Ja, für mehrere Zeilen verwenden textLabel.numberOfLines = 0; Auch in cellForRowAtIndexPath

aber immer noch müssen Sie die Höhe der Zelle ändern:

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

Try this:

 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

Am Ende müssen Sie so etwas wie diese beiden Methoden setzen in Ihre UITableViewCell Unterklasse:

// 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; 
} 
Verwandte Themen