20

UITableview複数の再利用可能な TableViewCellsがあります。1 つのセルには、UITextViewコンテンツに合わせてサイズが変更される があります。contentViewここで、TableViewCell のサイズを「ちょうど」変更する必要があるため、while テキストを読むことができます。私はすでに試しました:

cell2.contentView.bounds.size.height = cell2.discriptionTextView.bounds.size.height; 

または:

cell2.contentView.frame = CGRectMake(0, cell2.discriptionTextView.bounds.origin.y,     
cell2.discriptionTextView.bounds.size.width,     
cell2.discriptionTextView.bounds.size.height); 

メソッドでは:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath 
*)indexPath {}  

しかし、それはうまくいきません。

誰もこれを行う方法を知っていますか?

新しいコード:

    @implementation AppDetail

    CGFloat height;
    …

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {…

    cell2.TextView.text = self.text;
            [cell2.TextView sizeToFit];
            height = CGRectGetHeight(cell2.TextView.bounds);
     …
    }

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

        if (indexPath.row == 0) {
            return 143;
        }
        if (indexPath.row == 1) {
            return height;
        }

        return 0;
    }
4

8 に答える 8

8

You need you implement heightForRowAtIndexPath.

Say that the data that is to be displayed in the textView is stored in a NSArray.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
 CGFloat cellheight = 30; //assuming that your TextView's origin.y is 30 and TextView is the last UI element in your cell

 NSString *text = (NSString *)[textArray objectAtIndex:indexpath.row];
 UIFont *font = [UIFont systemFontOfSize:14];// The font should be the same as that of your textView
 CGSize constraintSize = CGSizeMake(maxWidth, CGFLOAT_MAX);// maxWidth = max width for the textView

 CGSize size = [text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

 cellHeight += size.height; //you can also add a cell padding if you want some space below textView

}
于 2013-10-06T16:42:10.320 に答える
4

私はJureのこの解決策を支持します

  • まず、テキストビューの制約をそのスーパービュー (この場合はセルの contentView) に固定するように設定します。
  • 無効にするtextView.scrollEnabled
  • 設定

    table.rowHeight = UITableViewAutomaticDimension;
    tableView.estimatedRowHeight = 44;
    

    最終的にコードが機能しない場合は、代わりにこれを使用してください

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return UITableViewAutomaticDimension;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return 44;
    }
    
  • 次のように実装UITextViewDelegateします。

    - (void)textViewDidChange:(UITextView *)textView {
         CGPoint currentOffset = self.tableView.contentOffset;
         [UIView setAnimationsEnabled:NO];
         [self.tableView beginUpdates];
         [self.tableView endUpdates];
         [UIView setAnimationsEnabled:YES];
         [self.tableView setContentOffset:currentOffset animated:NO];
      }
    
于 2016-10-24T03:00:54.253 に答える
3

このスレッドはかなり前からありましたが、iOS 8UITableViewAutomaticDimensionで導入されました。これを機能させるには、スクロール ビューのようにセルの上から下まで制約を設定する必要があります。ただし、その後、次のコードを に追加するだけですviewDidLoad()

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 122.0

推定高さが実際のものにできるだけ近いことを確認してください。そうしないと、バグのあるスクロールが発生します。

于 2016-02-01T19:22:58.820 に答える
2

UITableViewAutomaticDimension を使用してこれら 2 つのメソッドを ViewController に追加すると、うまくいくはずです。UITableViewCell 内に UITextView を可変長テキストで埋め込むと、うまくいきました。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}
于 2016-11-11T21:54:03.307 に答える