2013-04-23 67 views
1

我試圖讓父視圖控制器顯示一個子視圖控制器的視圖。我有下面父母的viewDidLoad容器/子UIViewControllers和狀態欄

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // create child view controller 
    [self setMenuController:[[MenuViewController alloc] initWithNibName:@"MenuView" bundle:nil]]; 
    [self addChildViewController:[self menuController]]; 

    // move the child view down 30 pt 
    CGRect frame = [[[self menuController] view] frame]; 
    frame.origin.y = 30; 
    [[[self menuController] view] setFrame:frame]; 
    [[self menuController] setWantsFullScreenLayout:YES]; 

    [[self view] addSubview:[[self menuController] view]]; 

    [[[self menuController] view] setNeedsLayout]; 
} 

子視圖控制器的廈門國際銀行是簡單地用一箇中心,部分透明UIImageView(見重疊)紅色視圖。

如果我禁用application:didFinishLaunchingWithOptions:狀態欄,我得到如下:

No status bar

如果我能夠在狀態欄,我得到:

Status bar

有了一個狀態欄,子控制器的UIView會自動調整以爲狀態欄的位置騰出空間(因爲圖像視圖居中,這就是頂部10分和底部)。由於這是一個子視圖,因此它應該始終使用視圖控制器視圖的全部大小,而不管父視圖是否具有狀態欄。除了將任何子視圖的大小調整爲20像素或在子視圖控制器中使用包裝視圖之外,是否有任何方法可以實現此目的?

回答

-1

嘗試將設置框設置爲menuController的視圖邊界而不是其框架。另外,我不確定是否需要setWantsFullScreen,這會導致視圖在狀態欄下方。

編輯後:

試試這個樣子,看看這是否正常工作。

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self setMenuController:[[MenuViewController alloc] initWithNibName:@"MenuView" bundle:nil]]; 
    [self addChildViewController:menuController]; 
    [menuController didMoveToParentViewController:self]; 
    menuController.view.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y +30, menuController.view.frame.size.width, menuController.view.frame.size.height); 
    [self.view addSubview:menuController.view]; 
} 
+0

它們兩個都是一樣的,0,0 /正確的寬度,正確的高度。 setWantsFullScreen是我試圖保持視圖大小不變的一件事,它沒有做任何事情,但我試圖將它留在那裏作爲例子。 – Turch 2013-04-23 15:36:28

+0

@Turch,我想你應該將原點設置爲superview的bounds.origin.y +30(如果在viewDidAppear中檢查它,狀態欄顯示,則控制器視圖的frame.origin.y將爲20)。但我對你的圖片中發生的一切有點混淆。我編輯了我的帖子,我認爲它應該起作用。請注意,我在viewDidAppear中執行它,因爲這些框架尚未在viewDidLoad中設置。 – rdelmar 2013-04-23 19:15:13