【发布时间】:2010-12-13 02:42:54
【问题描述】:
我有一个使用 UINavigationController、一些表格视图和 iAd 的 iPhone 应用程序。在顶层,我的导航控制器显示导航栏。在较低级别,它没有。
我遇到的问题是,有时我的顶级 UITableView 的框架会低于屏幕底部。发生的原因是这样的:
我的 viewWillAppear 方法如下所示:
-(void) viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated: animated]; // changing the last animated to NO does not help.
[super viewWillAppear:animated];
}
我的 viewDidLoad 方法如下所示:
- (void)viewDidLoad {
[self.navigationController setNavigationBarHidden:NO animated: NO];
[super viewDidLoad];
[self createTableView];
ADBannerView *abv = [[ADBannerView alloc]initWithFrame: [self initialBannerViewFrame]];
abv.delegate=self;
[self.view addSubview:abv];
self.bannerView = abv;
[self moveBannerViewOffscreen];
[abv release];
}
最后,moveBannerViewOffscreen 看起来像这样:
-(void) moveBannerViewOffscreen {
// moving it down and off
CGRect newBannerFrame = self.bannerView.frame;
CGFloat screenHeight = [[UIScreen mainScreen]bounds].size.height;
newBannerFrame.origin.y=screenHeight;
bannerView.frame = newBannerFrame;
CGRect newTableFrame = self.selectionTableView.frame;
newTableFrame.size.height = self.view.bounds.size.height;
self.selectionTableView.frame = newTableFrame;
}
当视图加载时,即使我调用了
[self.navigationController setNavigationBarHidden: NO animated: NO];
我的视图框架没有立即调整以适应导航栏。执行 moveBannerViewOffscreen 时仍然如此。所以table view的高度设置为480。当导航栏进来的时候,结果是table view的底部在屏幕下方,用户无法选择最后一行。
我确信我可以使用 NSTimer 来设置一些 kludge 来解决这个问题。但是有没有一种干净的方法来组织我的代码,这样问题就不会首先出现?
谢谢
【问题讨论】:
标签: iphone uinavigationbar race-condition iad