2010-12-13 5 views
0

У меня есть приложение для iPhone, которое использует 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. Таким образом, высота представления таблицы установлена ​​на 480. Когда появляется панель навигации, результат заключается в том, что нижняя часть представления таблицы находится под экраном, и пользователь не может выбрать последнюю строку.

Я уверен, что смогу использовать NSTimer для установки некоторого kludge, чтобы исправить это. Но есть ли простой способ организовать мой код, чтобы проблема не возникла в первую очередь?

Благодаря

ответ

0

На первом взгляде (без полного понимания вашей проблемы, я признаю), я подозреваю, что настраиваем себя в качестве делегата навигационного контроллера для того, чтобы воспользоваться одним из этих методов помогут с временем:

navigationController:didShowViewController:animated: 

navigationController:willShowViewController:animated: 

, возможно, не перемещает ваш баннер до тех пор, пока не будет вызван didShowViewController.

(Извиняюсь, если я не следуют ваши объяснения.)

+0

Появляется, чтобы решить эту проблему, хотя в безопасности я создал BOOL для отслеживания того, как предполагается, знамя, чтобы быть видимым, и направлен мой баннерные представления появляются/исчезают с помощью метода, который проверял значение этого BOOL. Но главное. , , в то время, когда вызывается showShowViewContoller, размер представления был скорректирован для учета панели навигации. Благодарю. –