2013-09-24 30 views
0

我不希望調整應用程序中的每一個XIB,而是希望調整主視圖的大小。iOS 7調整主視圖以調整狀態欄

我這樣做是在AppDelegate中,有部分成功:

if (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) { 
    NSLog(@"iOs 7 detected"); 
    frame.origin.y += 20.0; 
    frame.size.height -= 20.0; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque]; 
} 

self.window = [[[UIWindow alloc] initWithFrame:frame] autorelease]; 

整個窗口向下移動,狀態欄很好地顯示了,但我所有的觀點,現在是20個像素太高的屏幕,彷彿我的-20的高度沒有任何影響。

有沒有人有任何想法,我怎樣才能讓主窗口是正確的高度?

謝謝!

+0

可以顯示圖片嗎? – onmyway133

回答

1

一個可能的解決方案可能如下:您可以嘗試更改根視圖控制器框架大小,而不是更改窗口大小。這個解決方案適用於我。作爲參考,這裏是我的代碼。我有我的根視圖控制器內添加這一點,我把它在我的自定義init方法:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
     { 
      self.edgesForExtendedLayout = UIRectEdgeNone; 
      CGRect frame=self.view.frame; 
      frame.origin.y=20; 
      frame.size.height-=20; 
      self.view.frame=frame; 
     } 
+0

感謝您的建議。不幸的是,這似乎並沒有爲我工作。我做了檢查,以確保它是我的根視圖控制器(從AppDelegate調用),並且在self.edges ...行上面添加了一個NSLog以確保代碼被調用。 IB中的大部分觀點都是自動調整的,所以我想知道他們是否調整大小來回收空間。 –

+0

@ rdiaz82所以你必須爲每個ViewController執行此操作? – onmyway133

+0

@entropy不,你應該在你的應用程序的每個根視圖控制器中添加它。 – rdiaz82

0

我把它通過重寫根視圖 - 控制工作,附上我的「主」視圖 - 控制了這一點。也許有更好的工作方式和做到這一點,這是一種方法。

在你的AppDelegate(applicationDidFinishLaunch法)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    //Override rootviewcontroller with an empty viewcontroller 
    window.rootViewController = [[UIViewController alloc] init]; 

    //Setup my custom viewcontroller 
    MyViewController *vc = [[MyViewController alloc] init]; 
    [vc setModalPresentationStyle:UIModalPresentationFullScreen]; 
    [window.rootViewController addChildViewController:vc]; 
    [window.rootViewController.view addSubview:vc.view]; 

     // Put in the desired size and position. 
     vc.view.frame = CGRectMake(10.0, 100.0, 300.0, 100.0); 

     ... 

只是爲了好玩。如果你正在用StoryBoard進行你的項目,同樣的過程,但是獲取StoryBoard標識符。請注意,在這種情況下,您必須在Interface Builder中爲您的主視圖控制器設置StoryBoard ID。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     // Fetch viewcontroller from the storyboard ID that you have set in Interface Builder 
     UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyMainViewController"]; 
     [vc setModalPresentationStyle:UIModalPresentationFullScreen]; 
     [window.rootViewController addChildViewController:vc]; 
     [window.rootViewController.view addSubview:vc.view]; 
     // Put in the disired size and position. 
     vc.view.frame = CGRectMake(10.0, 100.0, 300.0, 100.0); 

     ...