2012-07-03 25 views
5

我已經從蘋果下載了PageControl示例代碼。這是一個UIPageControl的項目。我已經改變了它,以便UIScrollView有不同的看法。對於我想添加的每個視圖,我創建了UINavigationController,其中rootViewController作爲UIViewControllerUITableViewController的子類。然後我加入UIScrollView,查看navigationController爲什麼在dismissViewControllerAnimated之後,父框架不能保持相同的大小?

假設我現在正處於第一種觀點。我想展示一個模態視圖控制器。當我解僱它時,父視圖控制器(在我的示例中爲HomeViewController)全屏顯示,而不是以前的大小,這將顯示底部的頁面控件。我可以正常工作的唯一方法是在關閉後調整框架大小,但這是一種糟糕的用戶體驗,因爲它在顯示父視圖控制器後調用。關於如何避免HomeViewController框架在解除模態視圖控制器時調整大小的任何想法?

-(void)dismissMVC:(id)sender { 
    CGRect frame = self.view.frame; 
    [self dismissViewControllerAnimated:YES completion:^{ 
     self.view.frame = frame; 
    }];  
} 


- (void)loadScrollViewWithPage:(int)page 
{ 
if (page < 0) 
    return; 
if (page >= kNumberOfPages) 
    return; 

// replace the placeholder if necessary 
switch (page) { 
    case Home: 
    { 
     HomeViewController *controller = [viewControllers objectAtIndex:page]; 

     if ((NSNull *)controller == [NSNull null]) 
     { 
      controller = [[HomeViewController alloc] initWithPageNumber:page]; 
      [viewControllers replaceObjectAtIndex:page withObject:controller]; 
      [controller release]; 
     } 

     // add the controller's view to the scroll view 
     if (controller.view.superview == nil) 
     { 
      UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; 
      navController.navigationBar.barStyle = UIBarStyleBlack; 
      [navController setNavigationBarHidden:YES]; 
      CGRect frame = scrollView.frame; 
      frame.origin.x = frame.size.width * page; 
      frame.origin.y = 20; 
      frame.size.height = frame.size.height - 20; 
      navController.view.frame = frame; 
      controller.view.frame = frame; 
      [controller setNavController:navController]; 

      [scrollView addSubview:navController.view]; 
      [navController release]; 
     } 
     break; 
    } 
} 
} 
+0

你有沒有想過爲什麼這是真的? – aloo

+0

@aloo現在已經快一年了,所以我不記得我是如何解決這個問題的。你有同樣的問題嗎? – Adriana

+0

沒錯,但是我不能在一個小測試項目中重現它 – aloo

回答

2

當按下veiwControllers到導航堆棧,viewControllers誰的視圖沒有被示出,因爲低存儲器可被釋放電流之一。

如果您在appdelegate或最初推送的viewcontroller實例中維護HomeViewController的實例,您可以調用HomeViewController.view以強制其視圖加載,然後在調用dismissViewControllerAnimated之前爲其提供期望的幀。

0

將viewcontroller的視圖添加爲子視圖時,還需要將其添加爲childViewController。

在您的代碼:

[滾動視圖addSubview:navController.view];

該行缺少: [scrollView addChildViewController:navController];

相關問題