UITableView のヘッダの高さを変える

2010年7月30日金曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

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

人気の投稿(過去 30日間)