5

UILabelラベルに含まれるテキストの量に応じて、の高さを変更しようとしています。

ラベルに必要なサイズを計算できますが、UILabelフレームを設定しようとしても変更されません。

以下は私のコードです。最後の行のsize.heightを500のようなものに置き換えても、UILabelフレームのサイズは変わりません

 - (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;
}
4

8 に答える 8

7

ラベルのフレームは、内部のGameItemCellで設定する必要があります-(void)layoutSubviews

于 2013-02-28T09:31:15.100 に答える
2

大変な作業をすべて行う代わりに、次のようにしてみてください。

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

ラベルのデフォルトの幅を尊重することを忘れsizeToFitないでください。要件に応じて幅を設定してください。そして、高さはsizeToFitメソッドによって管理されます。

于 2013-02-28T08:37:34.003 に答える
2

最後に、UITableViewCellサブクラスに次の2つのメソッドのようなものを配置する必要があります。

// 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;
}
于 2014-02-26T03:01:39.113 に答える
1

numberOfLines設定するプロパティがありません。

追加 :

textLabel.numberOfLines = 0;
于 2013-02-28T08:09:38.313 に答える
0

ええ、複数の行にはtextLabel.numberOfLines=0を使用します。cellForRowAtIndexPath内

ただし、セルの高さも変更する必要があります。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Calculate new cell height too as you are doing in cellForRowAtIndexPath 
    return YOUR_SIZE;;
}
于 2013-02-28T09:58:47.437 に答える
0

numberOfLines

テキストのレンダリングに使用する最大行数。

このプロパティのデフォルト値は1です。最大制限を削除し、必要な数の行を使用するには、このプロパティの値を0に設定します。

外観をタックUILabelクラスリファレンス

あなたの質問によると、あなたは行の数を設定することはできません

これで、行数がラベルに設定されていないので、設定します。

textLabel.numberOfLines = lines;
于 2013-02-28T08:12:49.140 に答える
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;
于 2013-02-28T08:24:16.147 に答える
0

これを試して :

        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];
于 2013-03-04T07:58:53.607 に答える