2009-08-05 6 views
9

Ich kann nicht scheinen, um den Text zu bekommen, um tatsächlich über mehrere Zeilen erstrecken. Die Höhen sehen korrekt aus. Was vermisse ich?Wie kann ich eine Variable Größe UITableViewCell erstellen?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"StatusCell"] autorelease]; 

    CGRect frame = cell.contentView.bounds; 
    UILabel *myLabel = [[UILabel alloc] initWithFrame:frame]; 
    myLabel.text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    [cell.contentView addSubview:myLabel]; 

    [myLabel release]; 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; 
    CGSize withinSize = CGSizeMake(tableView.frame.size.width, 1000); 
    CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeWordWrap]; 

    return size.height + 20;  
} 

Was vermisse ich auch, dass die Etiketten länger als die Tabellenzelle erscheinen? alt text http://i31.tinypic.com/15chnjd.gif

Antwort

15

Tweetero liefert ein Beispiel dafür in MessageListController.m. Der Code gibt macht die folgende Anzeige:

http://ec.mashable.com/wp-content/uploads/2009/04/imageshackscreen.jpg

(Pic von Mashable genommen).

Der grundlegende Implementierung Umriss:

  1. Wenn ein UITableViewCell konstruieren, erstellen und ein UILabel als Subview in der in tableviewCellWithReuseIdentifier: gezeigte Weise hinzuzufügen. Suchen Sie nach der Erstellung von TEXT_TAG Label.

  2. wenn die UITableViewCell mit Blick bereichern, stellen Sie sicher, dass Sie richtig Format Etikett, wie in configureCell:forIndexPath erfolgt, TEXT_TAG für das Label-Tag aussehen ähnlich.

  3. die richtige Höhe für jede Zelle zurück, wie in tableView:heightForRowAtIndexPath erfolgt.

+0

Das ist großartig. Vielen Dank. –

2
myLabel.numberOfLines = 2; 

Überprüfen Sie die docs für vollständige Informationen darüber, wie diese Eigenschaft zu verwenden.

+0

das Problem ist, dass es nicht immer eine bestimmte Anzahl sein wird, wird es für jede Zeile ändern – Jason

+0

Die NumberOfLines Eigenschaft der Sets ** ** maximale Anzahl der Zeilen. Stellen Sie einen hohen Wert ein. (Und, wie Rob sagte, überprüfen Sie die docs.) –

+2

Sie haben auch die myLabel.lineBrakeMode zu UILineBreakModeWordWrap einzustellen. –

0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return theSizeYouWantYourCellToBe; 
} 
Verwandte Themen