0

3つのセクションがあり、それぞれにフッターが付いたアプリがあります。これはviewForFooterInSectionで確立し、heightForFooterInSectionを使用してそれぞれの高さを設定しました。

これらのフッターは、特定のものに基づいて高さが変わるため、固定サイズではありません。高さが変わると、かなり途切れ途切れのアニメーションになります。高さの変化を表示するのではなく、古い高さから新しい高さにジャンプするだけです。

if (condition == YES) {
    return 45;
}

else {
    return 70;
}

この高さの変化をアニメーション化して、よりスムーズなエクスペリエンスを提供する方法はありますか?ありがとう!

4

2 に答える 2

0

これは、セルの高さの変更をアニメーション化するために機能します。ヘッダーとフッターの高さでも機能しない理由はわかりません。現時点ではこれを自分でテストすることはできません。うまくいかない場合は申し訳ありません。お知らせください。削除します。

モデルまたはコントローラーのプロパティに変更を加えます (次に heightForFooter.. が呼び出されたときに、新しい値が返されるようにします)。次に、次のように呼び出します。

[self.tableView beginUpdates];
[self.tableView endUpdates];

これら 2 つのメソッドを間に何も置かずに呼び出すのは珍しいように思えますが、これにより、テーブルはそのデリゲートとデータソースを再クエリして新しいサイズを取得し、その新しいサイズにアニメーション化します。通常は行を追加または削除しますが、サイズの変更についても説明します。

于 2013-01-19T19:21:09.103 に答える
0

カスタムフッタービューを作成し、そのローカル変数を保持します...

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return self.footerView;
}

その後、あなたは呼び出すことができるはずです

[self.footerView updateHeightForCondition:YES]; //or NO

必要に応じて。

これは次のようなものです...

[UIView animateWithDuration:0.5f animations:^{
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, condition ? 45 : 70);
}];

viewForFooter をオーバーライドすると、heightForFooterInSection または titleForFooterInSection をオーバーライドする必要がなくなります。

于 2013-01-19T19:12:07.640 に答える