मैं परिवर्तनीय ऊंचाई कस्टम तालिका कक्षों के साथ एक UITableView का निर्माण कर रहा हूं, उनकी ऊंचाई एक निहित बहु-लाइन UILabel के आकार द्वारा निर्धारित की गई है। मुझे tableView:heightForRowAtIndexPath:
प्रतिनिधि विधि तारित हुई है और sizeWithFont:constrainedToSize:
का उपयोग करके अंतिम ऊंचाई को सही तरीके से गणना कर रही है।UITableViewCell फ्रेम ऊंचाई तालिका से मेल नहीं खाती दृश्य: heightForRowAtIndexPath:
मैंने अजीब मुद्दे पर चलाया है: उस समय तक डेटा स्रोत विधि tableView:cellForRowAtIndexPath:
कहा जाता है, सही प्रति पंक्ति ऊंचाई ऊपर वर्णित अनुसार पहले ही निर्धारित की जा चुकी है, लेकिन सेल का फ्रेम उस ऊंचाई से मेल नहीं खाता है। इसके बजाय, frame.size.height
सेल की संपत्ति तालिका दृश्य की डिफ़ॉल्ट सेल ऊंचाई है (86 पीएक्स, जैसा कि मैंने इसे इंटरफ़ेस बिल्डर में सेट किया है, सही ऊंचाई जब निहित UILabel में टेक्स्ट की केवल एक पंक्ति है), बजाय ऊंचाई tableView:heightForRowAtIndexPath:
उस सूचकांक पथ के लिए निर्धारित सही है।
मैं dequeuing का उपयोग कर cellForRowAtIndexPath:
में कोशिकाओं का निर्माण कर रहा हूँ, कि है,
// Using storyboards, this never returns nil, no need to check for it
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"SomeIdentifier"];
NSLog(@"%f", cell.frame.size.height); // 86, not correct if the cell contains a multi-line UILabel
ऐसा लगता है, तो, कि जो कुछ भी आईओएस पर्दे के पीछे क्या कर रहा है, dequeuing सेल के फ्रेम संपत्ति की स्थापना नहीं कर रहा है गणना की ऊंचाई से मेल खाते हैं। यह अपने आप में आश्चर्यजनक नहीं है, सेल उदाहरणों के साथ खुद को चिंतित करते हैं, न कि उनकी ज्यामिति। कोशिकाओं को सही ढंग से प्रस्तुत किया जाता है, हालांकि, ऊंचाई संपत्ति कहीं सेट की जा रही है, लेकिन यह cellForRowAtIndexPath:
के बाद होती है।
तो: जब मैं प्रारंभ में तालिका दृश्य को पॉप्युलेट करता हूं, तो cell.frame.size.height
सभी कोशिकाओं के लिए 86 है क्योंकि जब वे सूची को नीचे स्क्रॉल करते हैं तो पहली बार दिखाई देते हैं। चूंकि सही ज्यामिति को प्रदर्शित होने से पहले प्रत्येक पंक्ति के लिए पहले cellForRowAtIndexPath:
के बाद कुछ समय के बाद सेट किया जाता है, जब मैं बैक अप करता हूं, तो ऊंचाई की संपत्ति प्रत्येक सेल के लिए सही होती है जो पुन: उपयोग किए जाने के बाद वापस आती है।
इसके बाद मैं इच्छा पर आगे और पीछे तालिका दृश्य को स्क्रॉल कर सकता हूं, और उस बिंदु से प्रत्येक सेल के लिए ऊंचाई संपत्ति सही रहती है।
किसी भी डेक्यू-आधारित पुन: उपयोग से पहले, सही सेल ऊंचाई को पहली बार प्राप्त करने का सही तरीका क्या है? मुझे टेबल सेल के सबव्यूज़ की पुनः स्थिति बनाने के लिए इसकी आवश्यकता है। क्या मुझे को मैन्युअल रूप से cellForRowAtIndexPath:
पर कॉल करने की आवश्यकता है और उसके बाद उस ऊंचाई से मेल खाने के लिए ताज़ा बनाए गए कस्टमसेल उदाहरण के फ्रेम को मैन्युअल रूप से सेट करें? यह अनावश्यक प्रतीत होता है, और मुझे यह पता लगाने के लिए एक तंत्र बनाने की आवश्यकता होगी कि सेल को पहली बार गलत फ्रेम ऊंचाई बनाम बनाते समय बनाया जाए जब इसे इस अनावश्यकता से बचने के लिए सही फ्रेम ऊंचाई के साथ हटा दिया जाता है।
तो, अगर कोई इसके पीछे तर्क के बारे में कुछ प्रकाश डाल सकता है, तो मैं इसकी सराहना करता हूं।
प्रारंभिक प्रश्न वास्तव में अच्छा है, लेकिन यह उत्तर बहुत अच्छा नहीं है। यह साझा करने की देखभाल कि आपने समस्या को कैसे ठीक किया? – botbot