对于UITableView,setContentInset在旋转时没有正确更新

时间:2012-02-16 13:18:26

标签: ios uitableview uiscrollview

我有一个包含UITableView的视图。我想在桌子上方展示一个iAd。我认为最好的方法是将表格的contentInset设置为iAd横幅的高度 - 到目前为止一切都很好。

该应用支持轮换,因此我有以下代码:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {

    NSString *bannerSize = (UIInterfaceOrientationIsPortrait(interfaceOrientation)) ? ADBannerContentSizeIdentifierPortrait : ADBannerContentSizeIdentifierLandscape;
    int bannerHeight = [ADBannerView sizeFromBannerContentSizeIdentifier:bannerSize].height+1;

    iAdBanner.currentContentSizeIdentifier = bannerSize;
    [mainTable setContentInset:UIEdgeInsetsMake(bannerHeight, 0, 0, 0)];    
}

这适用于第一次旋转,但是当我向后旋转时,contentInset似乎没有被更改,实际上每次旋转设备时它似乎都被设置为'反向&# 39;值

但它有效 - 因为如果我尝试滚动表格,一切都会跳到原位。

经过多次阅读,我在上面的代码末尾添加了以下行:

[mainTable scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:NO];

这很有效! - 但是 - 我不希望每次旋转设备时桌子都滚回到顶部,所以我尝试了这个:

[mainTable scrollRectToVisible:CGRectMake(mainTable.contentOffset.y+bannerHeight, 0, 10, 10) animated:NO];

但是,如果我不在桌子的顶端,则会再次出现原始问题,因为当前部分的标题(它是一个普通的表格)大约是20像素太高或太低,已修复立即通过手动滚动。

所以现在我迷失了 - 任何想法?

1 个答案:

答案 0 :(得分:0)

您可能希望使用UIViewController而不是UITableViewcontroller并以编程方式添加UITableView。然后,您可以轻松设置广告的框架和tableview。旋转时,使用旋转方法再次更改帧!