UITableViewの仕様はテーブルをスクロールさせてセクションヘッダがスクロールアウトしそうになっても、画面の上端に残り続けるようになっている。
これを残らないようにするにはスクロールイベントハンドラでセクションが画面内にあるかどうかを判定し、画面外に出た場合はコンテンツをずらしてセクションヘッダが表示されないようにする。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y<=self.sectionHeaderHeight&&scrollView.contentOffset.y>=0) { scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0); } else if (scrollView.contentOffset.y>=self.sectionHeaderHeight) { scrollView.contentInset = UIEdgeInsetsMake(-self.sectionHeaderHeight, 0, 0, 0); } }
これはオプションで出来るようにしてほしいなぁ。
参考:iphone - Change Default Scrolling Behavior of UITableView Section Header - Stack Overflow