1

Interface Builder を介して tableView にいくつかの tableViewCells を追加しました。そのうちの 1 つに UITextView が含まれています。

ボタンがクリックされると、tableView がリロードされます。

- (void)updateViewWithMessage:(NSString *)message
{
    self.someMessage = message;
    [self.tableView reloadData];
}

私の cellForRowAtIndexPath メソッドで、このセルをチェックし、次のことを行います。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CellIdentifier = kMyCustomCell;
    MyCustomCell *contentCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    CGRect textViewFrame = contentCell.contentTextView.frame;
    textViewFrame.size.height = [self heightForContentView];

    NSLog(@"%f, %f, %f, %f\n", textViewFrame.origin.x,
          textViewFrame.origin.y,
          textViewFrame.size.width,
          textViewFrame.size.height);

    contentCell.contentTextView.frame = textViewFrame;
    contentCell.contentTextView.text = self.someMessage;

    return contentCell;
}

heightForContentView() で高さを計算します。

- (CGFloat)heightForContentView
{
    CGSize boundingRectSize = CGSizeMake(kCustomCellWidth - 20, CGFLOAT_MAX);
    CGRect textViewRect = [self.someMessage boundingRectWithSize:boundingRectSize
                                                     options:NSStringDrawingUsesLineFragmentOrigin
                                              attributes:nil
                                                 context:nil];
    return textViewRect.size.height + 20;
}

行の高さを何かに設定すると、セルのサイズが適切に変更されます。しかし、その中の textView はそうではありません。ボタンを 2 回クリックすると (updateViewWithMessage: メソッドが再度呼び出されます)、サイズが変更されます。これは奇妙です!

ところで: NSLog は正しいサイズを出力するので、それらは間違いなく設定されていますが、なぜこの TextView のサイズが変更されないのでしょうか?

誰かがこの問題をすぐに解決するのを手伝ってくれませんか?

4

1 に答える 1

1

コメントの後に編集:

UITextView のサイズを変更しないと思います。サイズを変更する前に次のコードを追加します contentCell

contentTextView.frame = CGRectMake(CGRectGetMinX(contentTextView.frame), CGRectGetMinY(contentTextView.frame), CGRectGetWidth(contentTextView.frame), textViewFrame.size.height);

古い答え:

attributes新しいサイズを計算するために渡すのを忘れたのかもしれません:

CGRect textViewRect = [self.someMessage boundingRectWithSize:boundingRectSize
                                             options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                          attributes:@{NSFontAttributeName:FONT}
                                             context:nil];

WithFONTは現在のフォントです。

こちらをご覧ください。

于 2013-10-11T13:28:06.963 に答える