के लिए पंक्ति हाइट्स की पूर्व-गणना मैं अपनी परियोजना में महीनों के लिए इस के साथ संघर्ष कर रहा हूं।आईओएस: UITableView
यहां सौदा है: मेरे पास केवल 1 सेक्शन के साथ UITableView है, लेकिन UITableViewCells की ऊंचाई अलग-अलग है। प्रत्येक UITableViewCell किसी ऑब्जेक्ट का प्रतिनिधित्व करता है, और नई ऑब्जेक्ट लगातार उपलब्ध हो रही हैं, और UITableView में डाली गई हैं। तालिका में प्रदर्शित होने वाली एक नई ऑब्जेक्ट की प्रभावी ढंग से खोज करने का एकमात्र तरीका यह है कि इसे एक बार खीचें (उस कोड को चलाएं जो UITableViewCell खींचता है और परिणामस्वरूप ऊंचाई क्या है) देखें।
आह, लेकिन समस्या है! UITableView प्रतिनिधि विधि तालिका दृश्य: heightForRowAtIndexPath: सेल को पहली बार खींचा जाने से पहले कहा जाता है! यह समझ में आता है: तालिका उन्हें खींचने से पहले कोशिकाओं को स्थानांतरित करना चाहता है।
मैं बहुत प्रयोग किया गया है और केवल 2 विकल्प मिल सकता है, जो दोनों के प्रमुख कमियां हैं:
- नई वस्तु तालिका में दिखाया जा सकता है, तो पहले नहीं देखा गया है, बस "लगता है" आवश्यकतानुसार सेल (बाद में सेल खींचा जाता है) की ऊंचाई और आकार बदलें। इससे समस्याएं स्क्रॉलिंग होती हैं, क्योंकि जब उपयोगकर्ता स्क्रॉलिंग बंद कर देता है, तो यह हो सकता है कि एक या अधिक कोशिकाओं को सही ऊंचाई पर आकार देने की आवश्यकता हो, जो खराब उपयोगकर्ता अनुभव बनाता है क्योंकि तालिका चारों ओर घूमती है और फिर से व्यवस्थित होती है।
- UITableView में डालने से पहले ऑब्जेक्ट ऊंचाई को "परीक्षण" करके पूर्व-गणना करें। जब नई वस्तु उपलब्ध हो जाती है, तो "डमी" UITableViewCell बनाएं और इसे ऑफ-स्क्रीन बनाएं, इस प्रकार ऑब्जेक्ट की ऊंचाई की गणना करें और बाद में इसे सहेज लें। इसके साथ समस्या यह है कि, ज़ाहिर है, हम केवल मुख्य धागे पर ऊंचाई परीक्षण कर सकते हैं (क्योंकि हमें आकर्षित करने की आवश्यकता है), जो आवेदन में प्रमुख अंतराल का कारण बनता है।
मेरा समाधान अब तक # 2 का उपयोग करने के लिए किया गया है, लेकिन इसे बनाने से समस्या को कम करने की कोशिश करने के लिए ताकि ऊंचाई परीक्षण केवल एक दूसरे के 1/4 होते हैं, जो "अंतरिक्ष से बाहर" परीक्षण, ताकि मुख्य धागा बहुत अधिक लॉक न हो। लेकिन, समाधान सुरुचिपूर्ण है और अभी भी अंतराल की समस्याओं का कारण बनता है, खासकर पुराने उपकरणों पर। अंतराल इतना खराब है कि मुझे वास्तव में एक बेहतर समाधान की आवश्यकता है।
शायद यह बताएगा कि क्या नई वस्तु है, अगर ऊंचाई की गणना की जा सकती है, तो वास्तव में इसे चित्रित किए बिना? – MadhavanRP
नहीं। यह नहीं कर सकता है। आने वाली वस्तु एक बहुत ही जटिल वस्तु है, एक कस्टम वस्तु है, जिसमें कई अलग-अलग चलने वाले भाग शामिल हैं। मेरा विश्वास करो, यह मेरा पहला विचार भी था और अगर मैं कर सकता तो मैं निश्चित रूप से ऐसा करता। असल में, मैंने सप्ताहों में एक अच्छा "अनुमान लगाने वाला एल्गोरिदम" बनाने की कोशिश की (प्रति पोस्ट 1, मेरी पोस्ट में)। –