2013-02-08 126 views
2

我有一個似乎與iOS6一起出現的導航欄定位問題。
它的作用在類似proplem旋轉的一些看法導航欄在添加狀態欄後不重新定位

的應用程序有一個閃屏時,一些用戶遇到許多方面,全屏顯示(實現通過設置Hide statusbar during application launchTrue)在

然後在viewDidLoad我主視圖控制器下面一行添加了狀態欄返回到應用程序:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

這增加了狀態欄的應用程序,如預期向下移動視圖20pt。 但是,NavigationBar保持放置在StatusBar下方,下方有20pt毛刺。

The glitch created by adding statusBar

iOS6的以前我用過的加入以下代碼行來解決這個問題:

[UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20); 

然而現在,這不工作。

一些研究表明,在致電viewDidLoad時,keyWindow.frame的大小和來源均爲{0,0},並且改變它不起作用。

將上述兩行插入到viewDidAppear時,我會在應用程序啓動時獲得相同的行爲。然後,當我移動到另一個視圖並返回到第一個視圖時,keyWindow.frame的更改具有預期效果,並且NavigationBar最終位於它應該位於的位置。

我的問題是:如何在StatusBar最初隱藏時將StatusBar添加到iOS應用後使NavigationBar獲得正確的位置?

回答

1

好像我再次在工作asleap:

在做其他方法(view[Will|Did]Appear)的事情,因爲狀態欄已經由調用從viewDidLoad顯示不適用的效果。我從那裏刪除了代碼,然後從viewDidAppear獲得了期望的效果。之前調用的任何方法都不會改變子框架。 (viewDidLoadviewWillAppear改變了[UIApplication sharedApplication].keyWindow.frame的框架)

所以這必須在viewDidAppear中完成。只要確保狀態欄還沒有顯示在一些之前所謂的方法中...

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]; 
    [UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20); 
} 
1

調用setStatusBarHidden:取而代之的是viewWillAppear。

+0

試過了。 Samme對所有視圖都有影響[Will | Did] [Appear | Load]方法。 – mariusnn 2013-02-08 13:45:33

+0

奇怪,我有完全相同的問題和[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]工作,但只能從viewWillAppear – elk 2013-02-08 13:56:27

+0

你知道;這是我再次愚蠢/疲憊。由於'setStatusBarHidden:NO'仍然處於'wiewDidLoad'方法中,所以後續調用的行爲不同。我得到的東西的唯一的地方是'viewDidAppear',並且只有兩個調用(因爲在任何調用中添加statusBar時視圖的框架都沒有調整,並且只有最後一個調用響應才被觸發(' viewDidAppear')。 – mariusnn 2013-02-08 14:01:27