2

適切な詳細セルレイアウトを持つグループ化されたテーブルビューがあります。これで、サーバーからデータが戻ってきました。非常に大きなテキストが返されることがあります。したがって、tableviewCell は他のセルよりも高くする必要があります。ここで私の問題のスクリーンショットを見ることができます。

ここに画像の説明を入力

最初のセルでわかるように、非常に大きなテキストがあります。セルの高さがテキストの長さに合わせて大きくなるようにしたいので、「...」の代わりにテキスト全体を常に見ることができます。これは、現時点でコードにあるものです。

#define PADDING 10.0f
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];

    NSArray *meta = sub.meta.allObjects;

    NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)];

    return textSize.height + PADDING * 3;
}

私が現時点で持っている編集コード。

- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];

    NSArray *meta = sub.meta.allObjects;

    NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:14.0];
    CGSize constraintSize = CGSizeMake(330.0f, 400);  // Make changes in width as per your label requirement.

    CGSize textSize = [text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return  textSize.height;
}

そして、これが結果です。

ここに画像の説明を入力

編集 CellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];
    NSArray *meta = sub.meta.allObjects;
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


        cell.textLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_label"];
        cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.detailTextLabel.numberOfLines = 0;
        cell.detailTextLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];

        cell.textLabel.textColor = [UIColor colorWithRed:102/255.0
                                               green:102/255.0
                                                blue:102/255.0
                                               alpha:1.0];
        cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
        return cell;



}
4

2 に答える 2

1

コードで使用する必要がありlineBreakMode:UILineBreakModeWordWrapます。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:14.0];
    CGSize constraintSize = CGSizeMake(330.0f, MAXFLOAT);  // Make changes in width as per your label requirement. 

    CGSize textSize = [text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return  textSize.height;
}

also in datasource methodさらに、次のようにdetailTextLabelcellForRowAtIndexPath`の2つのプロパティを設定する必要があります。

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
   cell.detailTextLabel.numberOfLines = 0;
 }
  • numberofLinesプロパティは次のことを説明します。

    このプロパティは、ラベルのテキストを境界の長方形に合わせるために使用する最大行数を制御します。このプロパティのデフォルト値は1です。最大制限を削除し、必要な数の行を使用するには、このプロパティの値を0に設定します。

于 2013-01-21T15:44:09.563 に答える
0

これを試して:

 - (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
            Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];

            NSArray *meta = sub.meta.allObjects;

            NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
            UIFont *cellFont = [UIFont fontWithName:@"Helvetica-Bold" size:18.0];
            CGSize constraintSize = CGSizeMake(330.0f, MAXFLOAT);  // Make changes in width as per your label requirement.

            CGSize textSize = [text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return  textSize.height + 20; }

次に、一意のセル識別子の使用を検討してください。ここでの考え方は、セルを再利用すると、コンテンツの高さが不一致になるということです。(一意の識別子のアイデアが気に入らない人もいますが、それらは機能し、テーブルが巨大にならない限り問題はありません。)したがって、これを試してください。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];
    NSArray *meta = sub.meta.allObjects;

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%i", indexPath.row]];

    if (cell == nil){
        cell.textLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_label"];
        cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.detailTextLabel.numberOfLines = 0;
        cell.detailTextLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];

        cell.textLabel.textColor = [UIColor colorWithRed:102/255.0
                                               green:102/255.0
                                                blue:102/255.0
                                               alpha:1.0];
        cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
}
        return cell;
}
于 2013-01-21T22:50:01.950 に答える