2010-11-11 85 views
0

在我的應用程序中,我有一個帶有UINavigationBar的UINavigationController,它是以編程方式創建的。 UINavigationBar在視圖中定製了定位,但每當調用/ didChangeStatusBarFrame(當您啓用通話狀態欄時),或者應用程序暫停和恢復時,navBar自動移回屏幕頂部。iPhone應用程序更改willChangeStatusBarFrame上的視圖並暫停

我能夠覆蓋這種行爲有點通過保持我的navBar位於底部,但現在它創建了第二個導航欄,它移動到頂部。

爲什麼會發生這種情況,以及如何防止它發生?這是iOS 4的一個新問題 - 應用程序在2.x和3.x中運行良好。

此外,在開始討論人機界面指南之前,請注意,我知道Apple不想在底部放置UINavigationBars。然而,這是一個自定義的應用程序,我和我單獨使用,我要求酒吧在最底層。此外,這個問題是讓我瘋了,我想知道答案,無論我的navBar謊言...

回答

0

小女孩,這是一個黑客,但它的作品。 爲了保持導航欄底部將顯示在通話狀態時:

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame { 
    [navigationController setNavigationBarHidden:YES]; 
} 

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame { 
    [navigationController setNavigationBarHidden:NO]; 
    CGSize s2 = navBar.bounds.size; 
    [navBar setFrame:CGRectMake(0, [navigationController.view bounds].size.height-s2.height, s2.width, s2.height)]; 

} 

而且自從有了這個應用程序的多任務處理,不僅沒有必要,而且也沒人要,我通過添加下面的plist中禁用它:

Application does not run in background 

這仍然不能真正回答我的問題,爲什麼navBar跳到頂端,這是一個駭人的解決方案,但它現在必須工作。