2016-04-04 9 views
5

मैं ऑटोलायआउट के माध्यम से जटिल UITableViewCell बनाने की कोशिश कर रहा हूं लेकिन स्क्रॉलिंग के दौरान यह एक बड़ा प्रदर्शन अंतराल दे रहा है, इसलिए मैंने फ्रेम-आधारित i.e प्रोग्रामेटिक रूप से जाने का फैसला किया।आईओएस UITableViewCell प्रोग्रामेटिक रूप से drawRect बनाम लेआउट में बनाउब्यूव्यू

सेल लेआउट की जटिलता फेसबुक कार्ड की तरह है जहां हर सेल डायनामिक टेक्स्ट और छवियों के लिए अलग w.r.t है।

मैंने layoutSubviews में सेल प्रस्तुत करने का प्रयास किया लेकिन स्क्रॉल अभी भी खराब है लेकिन फिर ऑटोटायआउट बेहतर है।

मैंने drawRect में सेल को प्रस्तुत करने का भी प्रयास किया और यह सबसे अच्छा प्रदर्शन देता है लेकिन स्क्रॉलिंग के दौरान मैं फ्रेम को अपडेट नहीं कर सकता क्योंकि इसे केवल एक बार बुलाया जा रहा है।

क्या कोई मुझे मार्गदर्शन कर सकता है कि सबसे अच्छा स्क्रॉल प्रदर्शन के साथ मैं सबसे अच्छा मामला क्या कर सकता हूं। मैं फँस गया हूँ ।

+0

एफबी कार्ड? क्या आप स्पष्टीकरण नहीं दे सकते? – faviomob

+0

का अर्थ है एफबी न्यूज फीड जहां छवि ऊंचाई भिन्न होती है और पोस्ट – Mukesh

+0

भी टिप्पणियां, पसंद काउंटर और अन्य सामान हो सकती हैं .. मैंने स्वीकार्य परफॉर्मेंस (हालांकि मूल के रूप में इतना आश्चर्यजनक नहीं) के साथ ऑटोगआउट के साथ इंस्टाग्राम सेल को पुन: उत्पन्न किया ठोस नमूना यह कहना मुश्किल है कि आपके समाधान में क्या गलत हो सकता है। मेरा मानना ​​है कि एफबी और इंस्टाग्राम ऑटोलाउटआउट का उपयोग नहीं करते हैं :) – faviomob

उत्तर

0

मैं भी एक ही सटीक निष्कर्ष पर आया हूं कि एक निश्चित जटिलता की कोशिकाओं से निपटने के दौरान स्टोरीबोर्ड बुद्धि बाधाओं का उपयोग करना बहुत धीमा हो जाता है। मेरे पास 10+ विभिन्न प्रकार की कोशिकाएं थीं। इस परिदृश्य में मुझे फ्रेम का उपयोग करना पड़ा।

मुझे डर है कि आपके बच्चे के विचारों के फ्रेम का उपयोग करके अपने सेल्स को लेआउट करने का कोई दूसरा तरीका नहीं है। HeightForRowAtIndexPath और cellForRowAtIndexPath विधियों का उपयोग करके आप पूरी तरह से अपनी कोशिकाओं को शैलीबद्ध कर सकते हैं।

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

ऊंचाई में ForRowAtIndexPath यदि आप बजाय सरणी में ऊंचाई सहेजते हैं तो सेल की ऊंचाई लौटने पर एक पंक्ति हो सकती है।

मैंने लेआउटव्यूव्यू विधियों को अनदेखा किया क्योंकि मुझे मौजूदा कोड का एक समूह रिफैक्टर करना था। हालांकि मैंने सेल को केवल ForRowAtIndexPath में रखा है और लेआउटव्यूव्यू विधि नहीं है। इस विधि में मैं माता-पिता की ऊंचाई की गणना करने के लिए बच्चे के विचारों की ऊंचाई का उपयोग कर सकता हूं। लेआउटव्यूव्यू में विचारों को बाद में रखा गया है और इससे समस्याएं हो सकती हैं।

वैसे भी उम्मीद है कि यह जानकारी किसी के लिए उपयोगी है।

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