hachinoBlog

hachinobuのエンジニアライフ

TableHeaderViewの横画面対応

アプリで横画面対応をしているときに詰まったのでメモ
単純に全画面対応にするには

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}

普通は上記でOKなわけだが、TableHeaderViewに画像を設定していたのでそれに応じて画像が大きくならないという問題が起きた。(横幅は変わったが高さが変わらないため画像が間延びした)
上記のshouldAutorotateToInterfaceOrientationやwillAnimateRotationToInterfaceOrientationメソッドで
横画面であればTableHeaderViewの高さを変えるという処理をしたが、それをやることでTableHeaderViewの高さは変わるも、その下に配置されているテーブルのセルの表示領域にまで食い込んで使い物にならなかった。
解決法としてはTableHeaderViewの高さを直接書き換えるのでなく、TableHeaderViewごと指定しなおすこと。

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
        toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        //imageはTableHeaderViewにaddSubViewしたUIImageView
        image.frame = [self headerViewFrameOrient]; //[self headerViewFrameOrient]は横画面用のCGRectを返すメソッド
    } else {
        image.frame = [self headerViewFrame]; //[self headerViewFrame]は縦画面用のCGRectを返す
    }
    
    [[self aTableView] setTableHeaderView:logoButton]; //TableHeaderViewを指定しなおす
    
}

これでOKでした