0

バックグラウンド:

マスター/詳細ビュー分割ビューコントローラーがあります。詳細テーブルビューでは、顧客のコメントを表示するUITextViewを1つだけ含むセルを持つ静的テーブルビューがあります。

マスタービューで顧客名をタップすると、コメント情報が読み取られ、詳細ビューのviewWillAppearのUITextViewのテキストに設定されます。同時に、UITextViewは次のコードでサイズ変更されます。

CGRect frame;
frame = self.detailCustomerCommentUITextView.frame;
frame.size.height = [self.detailCustomerCommentUITextView contentSize].height;

self.detailCustomerCommentUITextView.frame = frame;
[self.tableView reloadData];

このセルの高さも変更されます。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height = 30.0;

if (indexPath.section==3&&indexPath.row==1)
{
    height = MAX(self.detailCustomerCommentUITextView.frame.size.height, 30.0);

}else if (indexPath.section == 0 && indexPath.row == 0)
{
    height = 55.0;
}else if (indexPath.section == 1 && indexPath.row == 0)
{
    height = 47.0;
}

    return height;
}

問題を再現する手順:

コメントテキストが短い顧客(Customer Short)を初めてタップしたとき。サイズ変更されたフレームは次のとおりです。(CGRect)frame = origin =(x = 67、y = -6)size =(width = 568、height = 32)

次の後にブレークポイントでこの値を取得しました:self.detailCustomerCommentUITextView.frame = frame;

次に、heightForRowAtIndexPathで、同じ高さを取得しました。

(CGFloat)高さ= 32

これは良さそうですが、アプリではUITextViewにコメントが表示されませんでした。

すでにデバッグモードでこれをチェックしたので、このテキストビューのテキストは空ではないと確信しています。

次に、次のブレークポイントで同じ顧客をもう一度タップします。

frame = self.detailCustomerCommentUITextView.frame;

私は(CGRect)フレーム=原点=(x = 67、y = -6)サイズ=(幅= 568、高さ= 10)を見ました

これは、最後のフレームのサイズが高さ「32」になった後、UITextViewのサイズが高さ「10」に変更されることを意味します。

次に、コードが実行されます

frame.size.height = [self.detailCustomerCommentUITextView contentSize].height;

self.detailCustomerCommentUITextView.frame = frame;

高さが再び32に設定されているのを見ました。しかし、今回はすべてが完璧です。コメントテキストが表示され、UITextViewのサイズが変更されました。

次に、上記の手順を繰り返しましたが、すべてが正常で、UITextViewのサイズが変更されていないことがわかりました。

質問の概要:

顧客のShortを最初にタップしたとき、UITextViewが高さ32に正常にサイズ変更された後、高さ10にサイズ変更されるのはなぜですか?

シングルステップのデバッグを使用しましたが、フレームを変更する他のコードが見つかりません。

あなたの親切な助けに大いに感謝します。

4

1 に答える 1

1

問題は解決された。UITextViewのサイズは変更されていますが、heightForRowAtIndexPathを呼び出すと、UITextViewのフレームがセルの新しい高さと重なっていることがわかりました。

ストーリーボードで、UITextView-> Size Inspector-> View-> Autosizingで、内側の矢印をすべて削除し、外側のIだけを残します(申し訳ありませんが、StrutsとSpringsのどちらであるかわかりません)。このようにして、UITextViewは、セルの新しい高さに合わせて自動サイズ変更されます。

これが誰のニーズにも役立つことを願っています。

于 2012-12-06T02:36:55.870 に答える