10

私はUITableviewCellサブクラスを持っています。そのセルには、2 つのラベル (lblCommentlblDateTimeStampe) と、評価の星を表示するビューが 1 つあります。lblComment の動的な高さがすべてのテキストに収まるようにします。コメントの長さに応じて、高さを拡大および縮小する必要があります。以前にこれを実装しましたが、以下のようなAutoLayoutはありません

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {  

    NSString *label =  self.userComment.commentText;
    CGSize stringSize = [label sizeWithFont:[UIFont boldSystemFontOfSize:15]
                          constrainedToSize:CGSizeMake(320, 9999) 
                              lineBreakMode:UILineBreakModeWordWrap];

    return stringSize.height+10;

} 

現在、オートレイアウト機能を使用しています。

Autolayout を使用してこれを達成するにはどうすればよいですか?

どんな種類の助けも大歓迎です。ありがとう

4

4 に答える 4

3

残念ながら、自動レイアウトは役に立ちませんtableView:heightForRowAtIndexPath。そのメソッドを実装する必要があります。

UIViewのメソッドを使用できますsystemLayoutSizeFittingSize:が、それは非常にコストがかかるテーブル ビュー セルをインスタンス化して構成する必要があることを意味します。ただし、画面外に 1 つ保持して、計算に再利用できます。しかし、この時点では、開発の労力をあまり節約できないため、以前に手動で行ったように計算を行うことが、おそらくこれを行うための最良/最速の方法です。

于 2013-05-20T00:28:04.110 に答える
0

自動レイアウトを使用して同じ問題の解決策を実装しましたが、機能します。

まず、lblComment の heightConstraint を定義する必要があります。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UIFont *font = [UIFont fontWithName:@"YourFontName" size:YourFontSize] ;
UITextView *calculationView = [[UITextView alloc] init];
[calculationView setFont:font];
[calculationView setTextAlignment:NSTextAlignmentLeft];
[calculationView setText:lblComment.text];
int width = 0;
if(self.appDelegate.isDeviceiPhone)
    width = 284;
else
    width = 720;
CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];
   return size.height;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {
//initialize the cell..

UIFont *font = [UIFont fontWithName:@"YourFontName" size:YourFontSize];

UITextView *calculationView = [[UITextView alloc] init];
[calculationView setFont:font];
[calculationView setTextAlignment:NSTextAlignmentLeft];
[calculationView setText:cell.lblComment.text];

int width = 0;

if(self.appDelegate.isDeviceiPhone)
    width = 284;
else
    width = 720;

CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];

cell.lblDetailHeightConstraint.constant = size.height;

// the other stuff...
}

お役に立てれば。

于 2013-11-06T09:18:59.083 に答える
0

無料で入手できる Sensible TableView フレームワークを使用できます。フレームワークは、コンテンツが大きくなるにつれて、セルのサイズを自動的に変更します。また、テーブル ビューが既に表示されている場合は動的に行います。

于 2013-03-19T23:56:09.683 に答える
-2

IB で制約を正しく設定すれば、これは機能するはずです。あなたが言ったように、それも同様に機能しますが、プログラムで要素を追加する必要はありません。

tableviewcell に label1(可変高さ)、label2、および view1 がこの順序であると仮定すると、次のようにする必要があります。

  1. label2 と view1 に固定の高さ制約を設定する
  2. view1 の下部をセルの下部に固定します
  3. view1 と label2 の垂直方向の間隔を固定する
  4. label2 と label1 の垂直方向の間隔を固定する
  5. label1 の上部間隔をセルの上部に固定します

label1 に高さの制約がないことを確認してください。そうする場合は、それ以上でなければなりません。このような構成であれば、引き続き heightForRowAtIndexPath を使用でき、label1 はセルの高さに基づいて垂直方向に伸縮します。

于 2013-05-11T12:30:50.240 に答える