UITableView のヘッダの高さを変える
UITableView.tableHeaderView の frame.size.height を変えても反映されない。いろいろ試したところ tableHeaderView への再代入で反映されることがわかった。
GRect frame = self.headerView.frame; frame.size.height = 50.0; self.tableView.tableHeaderView.frame = frame; self.tableView.tableHeaderView = nil; self.tableView.tableHeaderView = self.headerView;ただし、同じものを代入しても駄目で一旦 nil を代入しておく。
トリッキーな方法だが現状これしか見つからなかった。
サンプル
アニメーションするサンプルを作ってみた。
こんなビューを用意して UITableView.tableHeaderView へセットしておく。初期状態では Area1 のみ表示させる。
実行するとこんな感じ。
Area2 がスルスルと開いていき
開き終わったら UITableView本体が再表示される。
"change header"ボタンが押された時の処理はこう。
- (IBAction)changeHeader:(id)sender { CGRect frame = self.headerView.frame; if (headerOpened_) { frame.size.height = 50.0; } else { frame.size.height = 100.0; } [UIView animateWithDuration:0.5 animations:^{self.tableView.tableHeaderView.frame = frame;} completion:^(BOOL finished){ self.tableView.tableHeaderView = nil; self.tableView.tableHeaderView = self.headerView; }]; headerOpened_ = !headerOpened_; }
- - - -
ヘッダの拡大縮小に追随して同時に表の本体もアニメーションして欲しいのだがうまく行かなかった。ヘッダではなくセルで表現するしかないか。
ソースコード
GitHubからどうぞ。
TableHeader at 2010-07-26 from xcatsan's iOS-Sample-Code - GitHub
Responses
Leave a Response