0

ラベル付きのカスタムセルがあります。私がやりたいことは、ラベルsizeToFitを作成しcellForRow...、ラベルの高さを という変数に渡すことですlabelHeight。それからheightForRow...私は戻りたいですlabelHeight

問題は、高さ0を返すことです。これが私のコードです:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    [customCell.label sizeToFit];
    self.labelHeight = customCell.label.frame.size.height;
    ...
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    return self.labelHeight;
}
4

2 に答える 2

0

heightForRowAtIndexPath を計算する必要がある場合、最も簡単な方法は (非効率的な方法だと感じますが)、heightForRow を使用して cellForRowAtIndexPath を呼び出すことです...次に、テーブルで再読み込みを呼び出すと、再び cellForRow が呼び出されます...セルの作成と、既知の定数と動的定数を考慮して高さの計算を単純化できる場合、これはより効率的ですが、より多くのコードになる可能性があります。例えば。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath(NSIndexPath *)indexPath{
  NSString *string = self.objects[indexPath.row];
  NSDictionary *textAttributes = nil; //attributes here

  return self.someButton.frame.size.height +
        self.someSwitch.frame.size.height +
        [string boundingRectWithSize:CGSizeMake(LABEL_WIDTH, CGFLOAT_MAX)
                       options:NSStringDrawingUsesLineFragmentOrigin
                    attributes:textAttributes
                       context:nil].size.height;
} 

iOS 8 以降をサポートでき、自動レイアウトを使用している場合のより良い解決策は-estimatedRowHeight、tableView のプロパティをゼロ以外の値に設定することです。これにより、セルの UILayoutConstraints がこれを計算できるようになります。これは、iOS8 の tableViews への非常に歓迎される新しい追加であり、WWDC ビデオの 1 つで説明されました。ただし、セルの自動レイアウトがないと機能しません。

于 2015-02-16T23:31:15.117 に答える