UITableHeaderViewを上端固定する

スクロール時にUITableHeaderViewを上端に固定して、Twitter的な見た目を実現する時にちょっとハマった。

if (self.tableView.contentOffset.y < 0) {
        float offsetY = self.tableView.contentOffset.y;
        CGRect tblFrame = self.tableView.tableHeaderView.frame;
        [self.tableView layoutIfNeeded]; // ポイント
        self.tableView.tableHeaderView.frame = CGRectMake(tblFrame.origin.x, self.tableView.contentInset.top+offsetY, self.tableView.frame.size.width,  self.tableView.frame.size.height);
    }
ポイント

ポイントと雑に書いたところがミソで、AutoLayoutの影響かこれがないとヘッダーは普通にスクロールしてしまった。
レイアウトし直させて、位置を決め直すということをしている。