2012-07-03 15 views
5

Tôi đã tải xuống mã mẫu PageControl từ apple. Đó là một dự án với UIPageControl. Tôi đã thay đổi nó để UIScrollView có các chế độ xem khác nhau. Đối với mỗi chế độ xem tôi muốn thêm, tôi đã tạo một UINavigationController với rootViewController làm lớp con của UIViewController hoặc UITableViewController. Sau đó, tôi đã thêm vào số UIScrollView, chế độ xem của navigationController.Tại sao khung chính không giữ nguyên kích thước sau khi bỏ quaViewViewControllerAnimated?

Giả sử tôi đang ở chế độ xem đầu tiên, ngay bây giờ. Tôi muốn hiển thị một bộ điều khiển xem phương thức. Khi tôi loại bỏ nó, bộ điều khiển xem cha mẹ (HomeViewController trong ví dụ của tôi) ở chế độ toàn màn hình, thay vì kích thước trước đó, điều này sẽ hiển thị điều khiển trang ở dưới cùng. Cách duy nhất tôi có thể làm cho nó hoạt động đúng là bằng cách thay đổi kích thước khung hình sau khi loại bỏ, nhưng đó là một trải nghiệm người dùng xấu, bởi vì nó được gọi sau khi bộ điều khiển xem cha được hiển thị. Bất kỳ ý tưởng về làm thế nào để tránh các HomeViewController khung được thay đổi kích cỡ khi loại bỏ một bộ điều khiển xem phương thức?

-(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

bạn đã bao giờ tìm ra lý do tại sao điều này là đúng? – aloo

+0

@aloo Đã gần một năm rồi, nên tôi không nhớ làm cách nào để khắc phục điều này. Bạn có gặp vấn đề tương tự không? – Adriana

+0

có kinh nghiệm nhưng tôi không thể tái tạo nó trong một dự án thử nghiệm nhỏ – aloo

Trả lời

2

Khi đẩy veiwControllers lên một chồng chuyển hướng, viewControllers ai xem không phải là một hiện tại được hiển thị có thể được phát hành bởi vì bộ nhớ thấp.

Nếu bạn duy trì một thể hiện của HomeViewController hoặc trong appdelegate hoặc bên trong trường hợp viewcontroller bạn đã đẩy ban đầu, bạn có thể gọi HomeViewController.view để buộc khung nhìn của nó tải và sau đó cung cấp cho nó khung mong muốn trước khi bạn gọi dismissViewControllerAnimated.

0

Khi thêm chế độ xem của chế độ xem là chế độ xem con, bạn cũng cần phải thêm nó dưới dạng childViewController.

Trong mã của bạn:

[scrollView addSubview: navController.view];

Dòng bị thiếu: [scrollView addChildViewController: navController];