1

UITableViewCell に 2 つの UILabel が含まれる UITableView を作成する必要があります。そのうちの 1 つはコンテンツの NSString の高さに収まる必要があります。UILabel の幅は固定で、行数は 0 に設定されています。高さを取得するにはどうすればよいですか? 次のようなコードが表示されます。

CGSize maximumSize = CGSizeMake(300, 9999);
NSString *myString = @"This is a long string which wraps";
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize myStringSize = [myString sizeWithFont:myFont 
                           constrainedToSize:maximumSize 
lineBreakMode:self.myLabel.lineBreakMode];

しかし、結果は次のとおりです。UILabel の行には 1 文字しかありません。この方法を使用できないのはなぜですか? どうもありがとうございました!

4

2 に答える 2

1

これを試して

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *str = @"This is a very very long string which wraps";
    CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17] constrainedToSize:CGSizeMake(280, 999) lineBreakMode:UILineBreakModeWordWrap];
    return size.height + 10;
}
于 2012-12-08T13:32:36.323 に答える
1

私は最終的にそれが機能するようになりました.私のプロジェクトのコード:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"shopmessage";
UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

UILabel* content = (UILabel*)[cell viewWithTag:11];
UILabel* date = (UILabel*)[cell viewWithTag:12];
NSDictionary* msg = [ _msglist objectAtIndex:indexPath.row];
NSString* type = [[msg objectForKey:@"msgtype"] intValue] == 0 ? @"我:":@"店家:";
[content setText:[NSString stringWithFormat:@"%@%@",type,[msg objectForKey:@"sendmsg"]]];
[date setText:[msg objectForKey:@"sendtime"]];

CGSize contentsize = [content.text sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(280, 1000) lineBreakMode:UILineBreakModeWordWrap];
//    content.frame.size = contentsize;
content.frame = CGRectMake(content.frame.origin.x, content.frame.origin.y, contentsize.width, contentsize.height);

[date setText:[msg objectForKey:@"sendtime"]];
//    date.frame.origin = CGPointMake(date.frame.origin.x, content.frame.origin.y + content.frame.size.height + 10);
date.frame = CGRectMake(date.frame.origin.x, content.frame.origin.y + content.frame.size.height, date.frame.size.width, date.frame.size.height);
return cell;

}

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary* msg = [ _msglist objectAtIndex:indexPath.row];
    NSString* text =[msg objectForKey:@"sendmsg"];
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(280, 1000) lineBreakMode:UILineBreakModeCharacterWrap];

    return size.height + 30;
}

参考:Apple サポートコミュニティ

于 2012-12-08T15:05:18.470 に答える