2014-04-08 11 views
12

मेरे पास कस्टम UITableViewCell है और मेरी कोशिकाओं का चयन प्रबंधित करें। जब सेल का चयन किया जाता है और चेकमार्क प्रस्तुत किया जाता है, तो सेल Content View चौड़ाई घट जाती है और पीछे की बाधाओं वाले मेरे लेबल बाईं ओर जाते हैं। सामग्री प्रभावी ढंग से मैं कैसे प्रभावी ढंग से बच सकता हूं?UITableViewCellAccessoryCheckmark और AutoLayout बाधाएं

मैं लचीला टेबलव्यू चौड़ाई के रूप में बाधाओं को स्थापित करने के लिए बाधाओं को सेट नहीं करना चाहता था और वे सही गठबंधन हैं। जब मैं IBOutlets के माध्यम से कोड में लेबल की बाधाओं को अद्यतन करना चाहता हूं, तो मैं में UITableViewCell के एकाधिक उप-वर्गों को वापस लौटाता हूं और कोड में बाधाओं को सेट करने का प्रयास करते समय मुझे didSelectRowAtIndexPath: में अपरिचित चयनकर्ता त्रुटि मिली है। कोई सुरुचिपूर्ण समाधान? धन्यवाद।

enter image description here

enter image description here

उत्तर

8

यह व्यवहार डिज़ाइन द्वारा है।

आपके इच्छित व्यवहार को प्राप्त करने का सबसे आसान तरीका प्रत्येक सेल पर एक खाली एक्सेसरी दृश्य सेट करना है जो सभी सामग्री को बाईं ओर उसी स्थान पर चेकमार्क के रूप में स्थानांतरित करेगा।

+2

भूल जाते हैं कि accessoryView accessoryType को प्राथमिकता से लेता है। यदि आपके पास गैर-शून्य एक्सेसरी व्यू है तो accessoryType दिखाई नहीं देगा। – CrimsonChris

14

मेरे पास एक समान (वास्तव में, सटीक) समस्या थी, जहां चेकमार्क बाईं ओर सबकुछ दबाएगा।

- संपादित करें:

कुछ घंटे अपने मूल जवाब के बाद, मुझे एहसास हुआ कि यह एक बहुत आसान मुद्दा है।

बाईं ओर यह धक्का सामग्री को धक्का दे रहा एक बाधा है सेल के देखें। इसलिए?

सही (जैसे मैं बटन), सेल ही को, न कि उसकी contentView पर आइटम से बाधा कनेक्ट करें।

Constraint to cell view



- मूल जवाब (वास्तविक जवाब है, शीर्ष पर है इस रिकॉर्ड के लिए है):

मैं सिर्फ वहाँ एक बहुत ही सरल समाधान है एहसास हुआ। मेरे पास एक बटन था जो चेकमार्क चालू होने पर बाएं धकेल दिया गया था और मुझे इसे रखने के लिए बाधा रखना पड़ा (ताकि 'अनचेक' बटन को दाईं ओर नहीं ले जाये)। यह दाएं और समग्र रूप से केवल खराब अभ्यास से हार्ड-कोडित 'चौड़ाई' थी। इस बात को ध्यान में रखें कि मैं गतिशील रूप से ऐसा करने के लिए उस चेकमार्क 'चौड़ाई' को 'प्राप्त' नहीं कर सका।

समाधान?

बाईं ओर एक बाधा पकड़ो।

यही है। मेरे पास एक लेबल भी है, इसलिए मेरे मामले में: लेबल से बाएं बटन से बाधा (इसलिए वे ओवरलैप नहीं होंगे) और बटन-बाएं से बाएं सामग्री-व्यू से। असल में, दाईं तरफ जो भी चालें बाएं तरफ 'पहुंचती' नहीं होती हैं (बल्कि दाईं ओर सब कुछ 'बैठे' होते हैं)।

Cell with constraints to left

+1

दोनों अच्छे उत्तर, और स्वीकार्य समाधान से कहीं अधिक सरल! –

+0

सरल, तेज़ और स्मार्ट समाधान, बहुत अच्छी टिप है। – FreeGor

+1

यह एक्सकोड 9, स्विफ्ट 4, आईओएस 9.3 काम नहीं करता है। ऑटो लेआउट शिकायत करता है, और बाधाओं को तोड़ता है। जो, वास्तव में, यह करना चाहिए। मूल समस्या यह है कि एक ऐप्पल डिज़ाइन दोष है: UITableViewCell UITableView की तरह बेकार है। यह एक दशक पुराना है, और स्क्रैप ढेर के लिए तैयार है। – Womble

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