これが私のアプリで欲しいものです。以下に示すのは、iPhone アプリ ストアの 2 つのスクリーンショットです。
アプリ ストアで使用されているのと同じように、基本的に「続きを読む」機能が必要です (上の 2 つの画像の「説明」セクションを参照してください)。ここの各セクション ( Description、What's New、Informationなど) はテーブル ビュー セルであると想定しています。内部のテキストは UILabel または UITextField です。
この機能を追加するためにこれまでに試したことは次のとおりです。
NSString *initialText = @"Something which is not a complete text and created just as an example to...";
NSString *finalText = @"Something which is not a complete text and created just as an example to illustrate my problem here with tableviews and cel heights. bla bla bla";
NSInteger isReadMoreTapped = 0;
私の cellForRowAtIndexPath 関数:
// Other cell initialisations
if(isReadMoreTapped==0)
cell.label.text = initialText;
else
cell.label.text = finalText;
return cell;
私の heightForRowAtIndexPath 関数:
// Other cell heights determined dynamically
if(isReadMoreTapped==0){
cell.label.text = initialText;
cellHeight = //Some cell height x which is determined dynamically based on the font, width etc. of the label text
}
else{
cell.label.text = finalText;
cellHeight = //Some height greater than x determined dynamically
}
return cellHeight;
最後に、 [その他] ボタンがタップされたときに呼び出される IBAction readMoreTappedメソッド:
isReadMoreTapped = 1;
[self.tableView beginUpdates];
[self.tableView endUpdates];
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:2 inSection:0]; // I need to reload only the third row, so not reloading the entire table but only the required one
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
これをすべて行った後、必要な機能を取得します。その特定のセルの新しい高さが計算され、新しいテキストが読み込まれます。しかし、TableView には非常に不自然な動きがあり、ユーザー エクスペリエンスが低下します。ただし、アプリ ストアの[その他] ボタンの場合はそうではありません。そのケースに不自然なジャークはありません。TableView はその場所に残り、変更されたセルのみがサイズが大きくなり、テキストがスムーズに表示されます。
iPhone アプリ ストアの [その他] ボタンで行ったような滑らかさを実現するにはどうすればよいですか?