2016-07-29 4 views
5

मैं वर्तमान में आईओएस प्रोग्रामिंग और स्विफ्ट सीखने के लिए एक ऐप पर काम कर रहा हूं। मेरे पास एक दृश्य है जिसमें दो मुख्य सबव्यूव, एमकेमैप व्यू और यूआईटीबल व्यू शामिल हैं। जब MapView में एक निश्चित एनोटेशन का चयन किया जाता है, तो मुझे तालिका दृश्य में कुछ कक्ष छिपाने की इच्छा होती है। अगर एनोटेशन को अचयनित किया जाता है तो कोशिकाओं को फिर से दिखाना चाहिए। वर्तमान में मैं कोशिकाओं को 0 से छिपाने और tableView.beginUpdates()tableView.endUpdates() पर कॉल करने के लिए ऊंचाई निर्धारित करके ऐसा करता हूं, हालांकि यह मेरे कस्टम कोशिकाओं के अंदर सभी प्रकार की ऑटोलायआउट बाधाओं को तोड़ने का कारण बनता है। मैंने ऊंचाई को 0 पर सेट करने से पहले सेल पर छिपी हुई संपत्ति को सत्य पर सेट करने का भी प्रयास किया है, लेकिन ऑटोलाउट बाधाएं अभी भी टूटी जा रही हैं।ऑटोटायआउट बाधाओं का उल्लंघन नहीं करते समय UITableViewCells को छिपाने के लिए कैसे करें

ऐसा करने का उचित तरीका क्या होगा?

अग्रिम धन्यवाद।

+0

टेबल दृश्य डेटा स्रोत के रूप में दो अलग-अलग सरणी रखना एक अच्छा तरीका है। पहले आपके सभी डेटा प्रदर्शित किए जा सकते हैं। दूसरा, तालिका दृश्य का वास्तव में सरणी डेटा स्रोत है। एनोटेशन पर क्लिक करते समय, आप पहली सरणी से डेटा ले कर दूसरी सरणी (उस डेटा को डालने या हटाने) को नवीनीकृत कर सकते हैं। तालिका दृश्य केवल अंत में पुनः लोड किया जाएगा। –

+0

इस तरह मैंने पहली बार अपना व्यू कंट्रोलर लागू किया था, लेकिन मुझे पता नहीं चला कि दूसरी सरणी अपडेट होने पर मैं कोशिकाओं के गायब होने को कैसे एनिमेट कर सकता हूं। मैं सुझावों के लिए खुला हूं कि मैं उस परिवर्तन को कैसे एनिमेट कर सकता हूं। –

उत्तर

2

मेरे 2 सेंट: सिर्फ एक के लिए परस्पर विरोधी बाधाओं में से एक की प्राथमिकता कम करने की कोशिश कम मूल्य, जैसे UILayoutPriorityDefaultHigh (750 यदि इंटरफ़ेस बिल्डर में उपयोग किया जाता है) या इससे भी कम, यह इस बात पर निर्भर करता है कि आप सेल कैसे बनाते हैं। ऑटो लेआउट सिस्टम को एक संकेत देने के लिए पर्याप्त होना चाहिए कि किस बाधा को सुरक्षित रूप से टूटा जा सकता है। शायद आप उस बाधा को तोड़ना चाहेंगे जो नीचे मार्जिन से दूरी को परिभाषित करता है।

+0

यह वास्तव में ऐसी बाधाओं थी जो मुसीबत देने वाले तल से दूरी को परिभाषित करती थीं। मैंने इसे एक और बाधा के साथ बदल दिया जिसके परिणामस्वरूप एक ही लेआउट होता है। धन्यवाद! –

1

नीचे heightForRowAtIndexPath: लागू करना। भी आप 0

ObjC संस्करण

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (shouldHideCell) 
     return 0; 
    } 
    else { 
     return UITableViewAutomaticDimension; 
    } 
} 

स्विफ्ट संस्करण में ऊंचाई बाधा निर्धारित करने की आवश्यकता

 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if shouldHideCell { 
      return 0 
     } else { 
      return UITableViewAutomaticDimension 
     } 
    } 
+0

आह मुझे स्पष्ट होना चाहिए था कि कौन सी बाधाएं टूट गई हैं। सेल के अंदर की बाधाएं टूट जाती हैं, जब ऊंचाई 0 पर सेट होती है। वैसे, स्विफ्ट में रेखाएं ';' के साथ समाप्त नहीं होनी चाहिए। –

+0

मैं एक तेज डेवलपर नहीं हूँ। अब इसे हटा दिया गया है। जब डिफ़ॉल्ट ऊंचाई बाधा द्वारा सक्षम ऑटो लेआउट का सेल सेल के सामग्री दृश्य में जोड़ा जाता है। जब आप 'heightForRowAtIndexPath()' को लागू नहीं करते हैं, तो सबस्ट्यूव – Rajesh

+0

के आपके 0 बाधा दृश्य के साथ बाधा उत्पन्न हो जाती है, मैंने एक निश्चित बाधा को एक कम बाधा वाले स्थान से बदलकर समस्या को ठीक किया है, जो अभी भी काम पूरा हो जाता है, हालांकि मदद के लिए धन्यवाद। –

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

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