0

この質問にはすでに多くの潜在的な回答があることを知っていますが、これまでに見たすべての回答の 99.995% で sizeWithFont が使用されていますが、これは現在廃止されています。

ここで扱っているテーブルビューセルが 1 つあるので、単純なはずですが、うまくいきません。オンラインでいくつかの回答を読んでまとめたコードを次に示します。これはセルラベル用です。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSString *myString = [self.locations[indexPath.row] locationDescription];
  return [self heightForText:myString] + 44.0;
}

-(CGFloat)heightForText:(NSString *)text{

  NSInteger MAX_HEIGHT = 10000;
  UILabel *cellLabelView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, MAX_HEIGHT)];
  cellLabelView.text = text;
  cellLabelView.font = [UIFont fontWithName:@"Helvetica Neue Light" size:18];
  [cellLabelView sizeToFit];
  return cellLabelView.frame.size.height;
}

ストーリーボードで定義された高さは 44 に設定され、ラベル自体の行は 0 に設定されているため、ラベルが必要な大きさを決定できます。

問題 #1: ラベルに設定されたテキストがワードラップされていない場合でも、(明らかに) 私が望むものではない余分なパディングが得られます。実際にワードラップがあったかどうかを計算する方法がわかりません。ワード ラップがない場合 (つまり、テキストがラベルより長くない場合は、44 を返したいだけです)。

問題 #2: 何らかの理由で、例として 5 行のようにテキストが長すぎる場合、MAXHEIGHT が 10,000 であるにもかかわらず、文字列の最後のテキストの一部が何らかの理由で途切れてしまいます。ワードラップを停止することにしました。この時点でパディングを増やすと、たとえば 88 にすると、すべてを見ることができます。(変)。

いくつかのエレガントなソリューション、フィードバック、ヘルプなどを探しています。ありがとう!

4

1 に答える 1