2013-10-27 14 views
13

की अंतिम पंक्ति को हटाते समय एनीमेशन समस्या अद्यतन: यह अब आईओएस 8.0 और उसके बाद में तय है। विवरण के लिए मेरे स्वीकृत उत्तर देखें।UITableView

मेरे पास आईओएस 7 UITableView है कि मैं पंक्तियों पर स्वाइप-टू-डिलीट करने की अनुमति देता हूं। मैं काट-छांट से निपटने हूँ:

tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

के साथ:

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

सभी पंक्तियाँ, सही एनीमेशन के साथ नष्ट हो जाती हैं तालिका में पिछले एक को छोड़कर। जब उपयोगकर्ता डिलीट बटन दिखाने के लिए स्वाइप करता है, तो उसे टैप करता है, सेल बाईं ओर स्क्रीन से पूरी तरह से स्लाइड करता है लेकिन अचानक गायब होने से पहले एक सेकंड के कुछ दसवें के लिए डिलीट बटन के साथ एक सफेद सेल छोड़ देता है। ऐसा प्रतीत होता है कि यह सभी कोशिकाओं के साथ हो रहा है, लेकिन अन्य सभी कोशिकाओं के नीचे एक पंक्ति है जो इसे ढकती है, इसे ढकती है।

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

मैं इस अंतिम सेल को एक ही UITableViewRowAnimationTop एनीमेशन रखना चाहता हूं जो दूसरों को करता है। क्या हो रहा है के बारे में कोई विचार?

+3

मैंने यह वही समस्या देखी है। मुझे यकीन है कि यह आईओएस 7 में UITableView के साथ बस एक बग है। – patr1ck

+0

अद्यतन के लिए धन्यवाद। क्या आप अपना अपडेट इसके बजाय उत्तर के रूप में जोड़ सकते हैं? यदि आप पर्याप्त रूप से अपने प्रश्न का उत्तर देते हैं तो आप इसे स्वीकार भी कर सकते हैं। एक बेहतर उत्तर हमेशा डाला जा सकता है और फिर आप उस उत्तर को इसके बजाय भी स्वीकार कर सकते हैं। –

उत्तर

4

अद्यतन: यह बग आईओएस 8 में ठीक किया गया है। अंतिम सेल हटाना अब बाईं ओर स्लाइड करता है, हटाएं बटन स्लाइड और दूर हो जाता है, और पृष्ठभूमि स्पष्ट है (कोई और सफेद क्षेत्र जो एनिमेशन के बाद अचानक गायब हो जाता है पूर्ण)। नीचे iOS 7 फिक्स अभी भी जरूरत है जब आईओएस 8.

iOS 7 फिक्स से नीचे चल रहा: मैं एक पर्याप्त लंबा अनुभाग शीर्ष लेख को देखने के साथ तालिका के अंत में एक और अनुभाग जोड़कर इस समस्या को दूर करने में सक्षम था। यह हेडर व्यू तालिका के नीचे खाली क्षेत्र की तरह दिखने के लिए स्टाइल किया गया है, इसलिए आप यह नहीं देख सकते कि यह वहां है। जब तालिका की आखिरी पंक्ति हटा दी जाती है, तो यह खाली अनुभाग शीर्षलेख ऊपर और उसके ऊपर स्लाइड करता है, जो वहां फंस गया डिलीट बटन छुपाता है। यह एक हैक का थोड़ा सा है, लेकिन ऐसा लगता है कि यह एक टेबल व्यू बग है।

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    CGRect frame = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
    UIView *view = [[UIView alloc] initWithFrame:frame]; 
    view.backgroundColor = self.tableView.backgroundColor; 
    self.tableView.tableFooterView = view; 
} 

इस कोड UITableView पकड़े दृश्य नियंत्रक में चला जाता है:

+0

वर्तमान में, यह मेरे लिए एकमात्र सायन समाधान है। केवल चेतावनी यह है कि हम कोशिकाओं पर पारदर्शी पृष्ठभूमि का उपयोग नहीं कर सकते हैं। – Eonil

0

मुझे लगता है कि तालिका दृश्य में अंतिम पंक्ति के नीचे हमेशा एक खाली पंक्ति को बनाए रखना है। वह चाल करेगा।

1

फ्रैंक ली द्वारा वर्णित रख-रखाव-खाली-पंक्ति चाल के विकल्प के रूप में, मुझे आखिरी पंक्ति को हटाने के लिए विशेष रूप से विशेष रूप से आवरण करके इस बदसूरत गड़बड़ी के आसपास मिल गया है: सेल को एनिमेट करने के बजाय, बस तालिका दृश्य पर कॉल -reloadData।

आपको कोई एनीमेशन नहीं मिलेगा, लेकिन आपको गड़बड़ी दिखाई नहीं देगी, इसलिए आपकी तालिका दृश्य टूटी नहीं दिखाई देगी। एक सार्थक व्यापार।

0

तुम भी UITableView.tableFooterView संपत्ति का उपयोग कर सकते हैं।

  • कोड एआरसी मानता है।
  • यदि आप तालिका के लिए पृष्ठभूमि छवि का उपयोग करते हैं तो यह एक अलग कहानी है।
  • कोड "अगर (आईओएस> 7)" खंड से घिरा हुआ है।
+1

यह समाधान पंक्ति पंक्तियों को हटा देता है जो आमतौर पर खाली तालिका में दिखाए जाते हैं। एक समाधान जो तालिका दृश्य के स्टॉक लुक को संरक्षित करता है वह बेहतर होगा। –

0

मेरा समाधान हटाए गए सेल को छुपाकर टूटी हुई एनीमेशन को बस अक्षम करना था।

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.hidden = YES; 
}