2013-01-24 186 views
2

我有UIViewController(例如,loginVC),我試圖將它的視圖添加到所有視圖之上。導航欄頂部時旋轉

我想這個觀點加入到AppDelegate

[[AppDelegate sharedDelegate].window addSubview:loginVC.view]; 

但在這種情況下,自轉不工作,所以我嘗試添加該視圖NavigationController的觀點。 NavigationController是rootViewController:

[[AppDelegate sharedDelegate].navigationController.view addSubview:loginVC.view]; 

它看起來不錯,自動旋轉,但它有旋轉時的奇怪行爲。

轉動開始後,導航欄顯示在loginVC.view的頂部,並在旋轉結束後進入該視圖,如截圖所示(我已經設置了紅色背景以使其更清晰可見,背景是透明的,看這種觀點背後的東西):

enter image description here enter image description here enter image description here

我已經試過:

  • 我發現這個地方在stackoverflow:禁用UIView動畫之前旋轉並啓用它們旋轉後 - 看起來不好,因爲旋轉發生沒有動畫(這有點明顯)

  • 試圖使navigationBar隱藏之前旋轉和使旋轉後可見,但在這種情況下的導航欄上帶來的loginVC.view頂部

接下來我該怎麼辦 - 添加此觀點上AppDelegate中的窗口和手動手柄轉動,但也許有一些更好的方式來做這個?

UPD:

截圖:

enter image description here

enter image description here

enter image description here

你可以看到第二個屏幕問題:導航欄在頂部

回答

0

我的朋友幫我解決這個問題

這裏是解決方案:

在AppDelegate中我已經創建UIWindow屬性:

//AppDelegate.h 
@property (nonatomic, strong) UIWindow *loginWindow; 

當應用程序啓動

//AppDelegate.m 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
.... 
    self.loginWindow = [[UIWindow alloc] init]; 
    self.loginWindow.windowLevel = UIWindowLevelStatusBar; 
    self.loginWindow.frame = [[UIScreen mainScreen] bounds]; 
    self.loginWindow.backgroundColor = [UIColor clearColor]; 
.... 
    return YES;  
} 
初始化它

然後,在loginVC中:

@interface loginVC() 
@property (nonatomic, weak) UIWindow *loginWindow; 
@end 

@implementation 
.... 

- (void)show { 
// setting up loginVC view 
    if (!self.loginWindow) { 
      self.loginWindow = [[AppDelegate sharedDelegate] loginWindow]; 
    } 
    if (![self.loginWindow.rootViewController isEqual:self]) { 
      [self.loginWindow setRootViewController:self]; 
    } 
    self.loginWindow.hidden = NO; 
//UPD: 
    //[self.loginWindow makeKeyAndVisible]; 
//UPD2: 
    [self.loginWindow makeKeyWindow]; 
} 

- (void)hide { 
// hiding view and stuff 
    [[[AppDelegate sharedDelegate] loginWindow] setHidden:YES]; 
//UPD: 
    //[[[AppDelegate sharedDelegate] window] makeKeyAndVisible]; 
//UPD2: 
    [[[AppDelegate sharedDelegate] window] makeKeyWindow]; 
} 
@end 

UPD:

沒必要用一個UIWindow的makeKeyAndVisible方法,第二個窗口上始終將第一個頂部。

UPD2:

再次更新我的回答,也許這將是爲別人有用。

沒有makeKeyAndVisible我不能使用UITestField太我註釋掉的代碼和麪臨的另一個問題:

我有UIViewController,創造另一個UIViewController實例該控制器內,並呼籲[self presentViewController:...]。在提出UIViewController我創建loginVC,但是當我打電話

[[[AppDelegate sharedDelegate] window] makeKeyAndVisible];

提出的viewController消失,但第一個視圖控制器仍然有這個控制器presentedViewController,所以我不能提出其他視圖控制器。

我的解決方案是在makeKeyWindow上更改makeKeyAndVisible

0

在uinavigationcontroller中添加您的viewController並推送uinavigationcontroller,然後導航欄始終可見。

+0

我已經更新了屏幕截圖,如您所見,導航欄始終可見,這不是問題 – derpoliuk