viewForFooterInSection ではなく、viewDidLoad の tableFooterView プロパティを使用して設定したカスタム tableFooterView (グラデーション付きの高さ 8 ピクセルの CoreGraphics アークです) があります。viewForFooterInSection で設定すると、コンテンツが一番下に達したときにコンテンツの上に浮かびましたが、tableFooterView は UITableView の高さにとどまるという点で、私が望むことを行います。
ただし、セルまたはテーブル ビューの高さが変化すると、tableFooterView はゆっくりとアニメーション化されます (約 0.5 秒ですが、非常に目立ちます)。フッターは最後のセルの延長のように見えるはずなので、これはかなり厄介です。たとえば、heightForRowAtIndexPath がセルの高さを変更すると、tableFooterView の一種のゴースト フロートが戻ります。このスクリーンショットでは、一番下のセルが通常のサイズに縮小され、フッターが浮かんでいます。
(新しいユーザーとして画像を投稿することはできませんが、リンクは次のとおりです: http://desmond.imageshack.us/Himg835/scaled.php?server=835&filename=iossimulatorscreenshotj.png&res=landing )
(このコンテンツは、2015 年 14 月 9 日に利用できなくなりました)。
また、最後のセルの高さが突然変更されて以前よりも大きくなった場合にも、コンテンツの上に浮きます。
ポインタはありますか?どうもありがとう。
編集:セルの高さが変化するということは、heightForRowAtIndexPathセクションを介して意味します:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
Note *currentNote = [self.notes objectAtIndex:indexPath.row];
if (currentNote.associatedCellIsSelected) {
return NORMAL_CELL_FINISHING_HEIGHT*2;
}
return NORMAL_CELL_FINISHING_HEIGHT;
}
編集 2: didSelectRowAtIndexPath で、セルを選択し (実際にはセルのメモ)、更新を開始/終了し、選択された行の reloadRow を呼び出します。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Note *currentNote = [self.notes objectAtIndex:indexPath.row];
if (currentNote.associatedCellIsSelected == FALSE) {
currentNote.associatedCellIsSelected = TRUE;
[tableView beginUpdates];
[tableView endUpdates];
}
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; }
また、Core Graphics フッターの代わりに単純な rect redColor UIView を使用しても同じ動作が得られ、同じ結果が得られることも確認しました。フッターをオーバーライドして、アニメーションしないようにする簡単な方法があればいいのにと思います。