2012-07-03 24 views
5

मैंने सेब से पेजकंट्रोल नमूना कोड डाउनलोड किया है। यह UIPageControl वाला एक प्रोजेक्ट है। मैंने इसे बदल दिया है ताकि में अलग-अलग विचार हों। प्रत्येक दृश्य के लिए मैं जोड़ना चाहता हूं, मैंने UINavigationController को rootViewController के साथ UIViewController या UITableViewController के उप-वर्ग के रूप में बनाया है। फिर मैंने UIScrollView में जोड़ा, navigationController का दृश्य।क्यों छोड़ने के बाद मूल फ्रेम को समान आकार नहीं रखा जाता है ViewControllerAnimated?

मान लें कि मैं अब पहले दृश्य पर हूं। मैं एक मोडल व्यू कंट्रोलर दिखाना चाहता हूं। जब मैं इसे खारिज कर देता हूं, तो मेरे उदाहरण में अभिभावक दृश्य नियंत्रक (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

जब एक नेविगेशन ढेर, viewControllers जो दृश्य है पर veiwControllers धक्का वर्तमान एक कम स्मृति की वजह से जारी किया जा सकता नहीं दिखाया जा रहा है।

आप या तो AppDelegate में या ViewController उदाहरण आप मूल रूप से धक्का दिया अंदर HomeViewController का एक उदाहरण बनाए रखने के हैं, तो आप HomeViewController.view इसे लोड और फिर इससे पहले कि आप dismissViewControllerAnimated फोन यह वांछित फ्रेम देने के लिए दृश्य है मजबूर करने के लिए कह सकते हैं।

0

एक व्यू कंट्रोलर के दृश्य को सबव्यूव के रूप में जोड़ते समय, आपको इसे एक बच्चेव्यू कंट्रोलर के रूप में भी जोड़ने की आवश्यकता होती है।

अपने कोड में:

[scrollview addSubview: navController.view];

लाइन गायब है: [scrollView addChildViewController: navController];