3つのラベル、ボタン、およびUITextViewを含むカスタムテーブルセルがあります。
UITextViewのテキストは、サーバーから取得しているデータであるため、実行時にのみ認識されます。
UITextViewに入力したテキストに基づいて、UITextViewとカスタムテーブルセルの両方のサイズを正しい高さにしようとしています。
UITextViewのテキストは、-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathメソッドで設定されます。
ここでは、以下を使用してUITextView(bodyTextView)のサイズを設定しようとしています。
CGSize stringSize = [cell.bodyTextView.text sizeWithFont:cell.bodyTextView.font constrainedToSize:CGSizeMake(cell.bodyTextView.bounds.size.width, 9999) lineBreakMode:NSLineBreakByWordWrapping];
[cell.bodyTextView setText:threadMessage.body];
CGRect bodyFrame = cell.bodyTextView.frame;
bodyFrame.size = cell.bodyTextView.contentSize;
[cell.bodyTextView setFrame:bodyFrame];
UITextViewの下部に「TopSpaceTo」制約があるにもかかわらず、UIButtonが本来の位置に移動していないか、多かれ少なかれ正常に機能しているようです。自動的に動くと思っていたでしょう。ただし、これをプログラムで適切な場所に移動できるので、大したことではありません。
コードの次のビットは、ラベルとUITextViewに収まるようにtableViewCellのサイズを適切な高さにしますが、下部のボタンに十分なスペースがありません。次に、セルの高さを計算し、次を使用して返します...
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
CGSize stringSize = [threadMessage.body sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 9999) lineBreakMode:NSLineBreakByWordWrapping];
float oldHeight = 28;
float newHeight = stringSize.height;
return tableView.rowHeight - oldHeight + newHeight;
}
ご覧のとおり、UITextViewの高さと新しい高さの高さを変えています。プログラムでoldHeightを取得しようとしましたが、何千ものクレイジーな値を取得していました。
大きな問題は、ビューが最初に表示されたときに、行のサイズが多かれ少なかれ正しく設定されていることです。ただし、UITextViewのサイズは変更されていません。スクロールして画面外に移動してからスクロールして戻すと、UITextViewのサイズが適切に設定されます。しかし、もう一度スクロールして画面に戻ると、サイズが再び1行に変更されます。
鶏が先か卵が先か、頭が回らない気がします。
私が理解したいと思っている2つの主な問題は次のとおりです。
1)UITextViewを最初から適切なサイズに設定し、画面のスクロールオフや画面上でスクロールしてもその状態を維持するにはどうすればよいですか?
2)カスタムTableCellViewを適切なサイズにして、ボタンの高さを含めるにはどうすればよいですか?
これがすべて理にかなっていることを願っています。十分な詳細を提供しました。質問があれば教えてください。
任意の提案をいただければ幸いです。ありがとうございました!
よろしく、
ピーター