У меня есть приложение для iPhone, которое использует UINavigationController, некоторые представления таблиц и iAd. На верхнем уровне мой контроллер навигации показывает панель навигации. На более низких уровнях этого не происходит.
Проблема, с которой я сталкиваюсь, заключается в том, что иногда фрейм моего 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. Таким образом, высота табличного представления установлена на 480. Когда появляется панель навигации, в результате нижняя часть табличного представления оказывается под экраном, и пользователь не может выбрать последнюю строку.
Я уверен, что мог бы использовать NSTimer, чтобы настроить некоторый кладж, чтобы исправить это. Но есть ли чистый способ организовать мой код, чтобы проблема не возникала вообще?
Спасибо