2009-08-23 15 views
17

अगर मैं एक tableView (पूर्व: height -= 200) के फ्रेम ऊंचाई चेतन करने का प्रयास, कोशिकाओं है कि पिछले में प्रदर्शित 200px अचानक गायब होने से पहले फ्रेम के सुचारू एनीमेशन पूरा करती है।UITableView फ्रेम ऊंचाई एनीमेशन गड़बड़

यह सुनिश्चित करने के लिए कि मैं कुछ भी नहीं कर रहा हूं, मैंने एक नया व्यू-आधारित एप्लिकेशन बनाया है। मुख्य viewController में मैं पूरी स्क्रीन भरने के लिए पर्याप्त pseudo rows के साथ अपना खुद का tableview बना सकता हूं। और एक पंक्ति के चयन पर मैं एक साधारण ऊंचाई एनीमेशन करता हूं।

सबसे अधिक प्रासंगिक कोड:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.myTable = [[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)] autorelease]; 
    myTable.delegate = self; 
    myTable.dataSource = self; 
    [self.view addSubview:myTable]; 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    CGRect frame = self.myTable.frame; 
    frame.size.height = 200; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDelay:.5f]; 
    [UIView setAnimationDuration:0.5f]; 
    self.myTable.frame = frame; 
    [UIView commitAnimations]; 
} 

क्या किसी को पता है कि क्यों यह हो रहा है, या एक ठीक/वैकल्पिक हल क्या हो सकता है?

किसी भी सुझाव की वास्तव में सराहना की जाती है। टीआईए!

उत्तर

0

मुझे तालिका दृश्य का आकार बदलने के लिए उचित विधि की तलाश करते समय आपका प्रश्न मिला। मुझे लगता है कि आपकी समस्या आपके एनीमेशन में है, आपने UITableView के बजाय UIView निर्दिष्ट किया है। मैं UIView या UITableView का उपयोग कर अपनी समस्या को डुप्लिकेट करने में असमर्थ था, लेकिन मैं एसडीके 3.1 का उपयोग कर रहा हूं और यह एक बग हो सकता है जो आपकी पोस्ट के बाद से तय किया गया है। मुझे यकीन नहीं है, लेकिन मुझे उम्मीद है कि यह मदद करता है!

+0

नहीं, एनीमेशन कॉल के लिए "UIView" विधियों का उपयोग करना सही है। – rluba

+0

मैंने 3.1 के साथ एक ही कोड की कोशिश की, और अभी भी मेरे लिए एक मुद्दा है;/मेरा वर्तमान वर्कअराउंड टेबलव्यू – dizy

0

मुझे बिल्कुल वही समस्या है। मुझे कल्पना है कि टेबलव्यू के पास "सेटफ्रेम:" पर एक विशेष व्यवहार है, ऐसा लगता है कि तालिकादृश्य उन कक्षों को हटा देता है जो नए फ्रेम के साथ दिखाई नहीं देंगे।

एनीमेशन के मामले में, कोशिकाएं केवल एनीमेशन के अंत में दिखाई नहीं देगी, लेकिन ऐसा लगता है कि टेबलव्यू परवाह नहीं है।

अगर किसी के पास बेहतर सिद्धांत है, तो मुझे यह सुनकर खुशी होगी!

8

यहां भी वही समस्या है। यह वही है जो मैं कर रहा हूं और मूल सुचारू रूप से एनिमेट करता है, लेकिन आकार तुरंत बदलता है ... परेशान।

[UIView beginAnimations:@"HideTabbar" context:nil]; 
    [UIView setAnimationDuration:.3]; 
     self.tableView.frame = CGRectMake(0.0, 44.0, 320, 366); 
    [UIView commitAnimations]; 

अद्यतन: मेरी मेज

self.tableView.autoresizingMask = UIViewAutoresizingNone; 
+1

का आकार बदलने से पहले एनीमेशन को पूरा करने का इंतजार करना है। ऑटोरेसाइजिंगस्क को "कोई नहीं" में बदलना निश्चित रूप से मेरी स्थिति में काम करता है। धन्यवाद। – macandyp

15

मुझे यकीन है कि मैं वास्तव में एक ही समस्या है, लेकिन [UIView setAnimationBeginsFromCurrentState:YES]; हल (भाग) खामियों को उपयोग करने का नहीं हूँ (: एनीमेशन से पहले इस जोड़ने का प्रयास करें एक फ्रेम ऊंचाई परिवर्तन एनिमेट करते समय पागलपन के चारों ओर फिसल देखें)।

+1

धन्यवाद। इसे मेरे लिए हल किया। समस्या: बाहरी दृश्य (फ्रेम) को एनिमेट करना - और एक आंतरिक टेक्स्टव्यू का आकार बदलना (केवल नई ऊंचाई - pos एक ही रहना चाहिए) –

3

यह एक पुराना सवाल है और कामकाज के लिए पहले से ही कुछ सुझाव हैं, लेकिन मैंने सोचा कि मैं अपना जोड़ दूंगा।

मैंने contentInset और scrollIndicatorInsets गुणों को एनिमेट करने का अंत किया, जो भ्रम प्रदान करता है कि तालिका का आकार बदल रहा है।

4

किसी भी व्यक्ति को इस प्रश्न को मारने के लिए & भविष्य में उत्तर दें, यहां आईओएस 4 में पेश किए गए यूआईवीव के ब्लॉक आधारित एनिमेशन में @ ryyst के उत्तर का उपयोग करने का तरीका बताया गया है।

[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
      // change frame etc here 
    } completion:^(BOOL finished) { 
      // any clean up here 
    }]; 
0

यह एक पुराना सवाल है लेकिन यह भविष्य में किसी की मदद कर सकता है;

मैं एक UIView में tableview embedding, और tableview के बजाय UIView का आकार बदलकर एक ऐसी ही समस्या हल हो। मैंने tableview's ऊंचाई को एक बड़े मूल्य पर सेट किया है और UIView पर "क्लिप सबव्यू" संपत्ति भी सेट की है। मैं UIView का आकार तालिकादृश्य के contentSize के अनुपात में बदलता हूं। यह एक अच्छा समाधान नहीं है लेकिन यह मेरे उद्देश्यों के लिए काम करता है।

+0

इससे कोई अन्य समस्या आती है, आप तालिका दृश्य देखने में सक्षम नहीं होंगे क्योंकि वे तालिका के अंदर हैं लेकिन दृश्य कंटेनर UIView के दृश्यमान फ्रेम के नीचे, इसलिए जब आप इसे स्क्रॉल करने का प्रयास करते हैं तो tableView उछाल जाएगा क्योंकि यह कोशिकाओं के अंत तक पहुंच गया है और फिर भी आप उन्हें नहीं देख सकते – Mehdi

0

अंततः समाधान मिला! वास्तव में एक बग है !! variables का उपयोग न करें, जब ऊंचाई एनिमेटिंग [[UIScreen mainScreen] bounds] का उपयोग करें। इस तरह:

[UIView animateWithDuration:0.5 animations:^{ 
      tableView.frame=CGRectMake(0, 38, fullScreenRect.size.width, [[UIScreen mainScreen] bounds].size.height-38); 
}]; 
नहीं

:

[UIView animateWithDuration:0.5 animations:^{ 
      tableView.frame=CGRectMake(0, 38, fullScreenRect.size.width, fullScreenRect.size.width-38); 
}]; 

और यह जादू की तरह काम करेंगे!

संबंधित मुद्दे