2012-03-16 4 views
5

मेरे पास कस्टम सेल के साथ UITableView है। स्वाभाविक रूप से, cellForRowAtIndexPath में मैं एक पुराने सेल को हटाने और इसे पुन: उपयोग करने का प्रयास करता हूं। प्रत्येक सेल में ऑटोरेसाइज्ड विचारों का पदानुक्रम होता है: जब मैंने अपनी सामग्री cellForRowAtIndexPath में सेट की है, तो मैंने शीर्ष दृश्य का फ्रेम सेट किया है, और इसके सबव्यूज़ तदनुसार उनके फ्रेम बदलते हैं। ध्यान दें कि पंक्ति ऊंचाई भी गतिशील है। यह सब अच्छा काम करता है जब मैं बस तालिका को स्क्रॉल करता हूं (विभिन्न सामग्री और फ्रेम की पंक्तियों के साथ)। लेकिन मेरे पास इस तालिका के समान दृश्य में एक टेक्स्ट फ़ील्ड भी है, इसलिए मुझे दिखाए गए कीबोर्ड को छुपा/छुपाने के लिए तालिका की सामग्री को स्क्रॉल करने की आवश्यकता है। साथ हीएनीटिंग सामग्री UITableView में प्रवेश पंक्तियों के सबव्यूज़ 'फ्रेम को एनिमेट करता है

// Called when the UIKeyboardWillHideNotification is sent 
- (void)keyboardWillBeHidden:(NSNotification*)aNotification 
{ 
    NSTimeInterval animationDuration = [[aNotification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    UIViewAnimationCurve animationCurve = [[aNotification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; 

    [UIView setAnimationCurve:animationCurve]; 
    [UIView animateWithDuration:animationDuration animations:^{ 
     messagesTable.contentInset = UIEdgeInsetsMake(0, 0, kHSTableBottomInset, 0); 
     messagesTable.scrollIndicatorInsets = UIEdgeInsetsZero; 
    }]; 
} 

यह अच्छा काम करता है, लेकिन वहाँ एक दिलचस्प गड़बड़ है:: मुझे लगता है कि के लिए contentInset संपत्ति चेतन जब कुंजीपटल छिपा हुआ है और contentInset वापस सामान्य करने के एनिमेटेड है (kHSTableBottomInset मार्जिन रखने के लिए एक छोटा सा मान है), टेबल पुनः लोड कोशिकाओं जो ऊपर से स्क्रॉल करने के लिए स्क्रॉल करेंगे। समस्या यह है कि यह रीलोडिंग एनीमेशन ब्लॉक के अंदर भी किया जाता है! नतीजतन, जब मैं cellForRowAtIndexPath (जिसे एक भाग या पुनः लोड करने के रूप में कहा जाता है) में अस्वीकृत सबव्यू फ्रेम (विशेष रूप से, चौड़ाई) को बदलता है, तो यह परिवर्तन एनिमेटेड भी होता है और यह सेल स्क्रॉल को देखने के लिए नीचे दिखाई देता है। क्या मैं इस तरह के व्यवहार से बच सकता हूं?

उत्तर

4

मैं अंत में पाया समाधान: फ्रेम सेटिंग कोड इस तरह एनीमेशन से बाहर रखा जा सकता है:

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 
mainDataView.frame = rect; 
[CATransaction commit]; 

या

[UIView setAnimationsEnabled:NO]; 
mainDataView.frame = rect; 
[UIView setAnimationsEnabled:YES]; 

मिले जवाब यहाँ: How can I exclude a piece of code inside a core animation block from being animated?

-1

इस मुद्दे के हल clipsToBoundsYES से tableview पर सेट करके।

tableView.clipsToBounds = YES: 

और अगर आपको अभी भी समस्या है, clipsToBoundsfooterview को भी निर्धारित किया है।

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