2010-04-27 18 views
11

मेरे पास एक UITableView है जिसमें वेरिएबल-ऊंचाई UILabels वाले कक्ष हैं। मैं न्यूनतम ऊंचाई की गणना करने में सक्षम हूं, लेबल को sizeWithFont:constrainedToSize:lineBreakMode: का उपयोग करने की आवश्यकता है, जो तालिका दृश्य पहली बार लोड होने पर ठीक काम करता है। जब मैं तालिका को घुमाता हूं तो कोशिकाएं व्यापक हो जाती हैं (जिसका मतलब है सामग्री को प्रदर्शित करने के लिए कम लाइनें आवश्यक हैं)। क्या कोई तरीका है कि मैं अभिविन्यास परिवर्तन एनीमेशन के दौरान या तुरंत या बाद में UITableView द्वारा पुन: निर्धारित कोशिकाओं की ऊंचाई प्राप्त कर सकता हूं? धन्यवाद।अभिविन्यास बदलें पर UITableViewCell ऊंचाई बदलें

+0

आकार के लिए उपयोग किए जाने वाले आकार (चौड़ाई) को आप कैसे प्राप्त करते हैं: बाध्यकारी: लाइनब्रैक मोड:? मैं एक वेरिएबल-ऊंचाई सेल बनाने की कोशिश कर रहा हूं जो सादा और समूहीकृत टेबलव्यू शैली के लिए काम करता है, लेकिन यह पता नहीं लगा सकता कि समूहबद्ध तालिकादृश्य की चौड़ाई कैसे प्राप्त करें – flagg19

उत्तर

13

आपका UITableViewController किसी विशेष पंक्ति की पंक्ति की ऊँचाई निर्दिष्ट करने के लिए tableView:heightForRowAtIndexPath: विधि लागू कर सकते हैं, और यह वर्तमान अभिविन्यास ([[UIDevice currentDevice] orientation]) क्या ऊंचाई वापस जाने के लिए तय करने के लिए देख सकते हैं।

यकीन tableView:heightForRowAtIndexPath: फिर से बुलाया जाता है जब उन्मुखीकरण परिवर्तन, तो आप शायद को this question में वर्णित के रूप उन्मुखीकरण परिवर्तन का पता लगाने की आवश्यकता होगी, और [tableView reloadData] फोन बनाने के लिए।

+0

हाँ, यही वह है जो मैं करता हूं। –

+0

मेरे पास वर्तमान में 'tableView है: heightForRowAtIndexPath:' कार्यान्वित किया गया, मैंने इसे ओरिएंटेशन परिवर्तन पर कॉल नहीं किया, लेकिन इसे 'रीलोडडाटा' पर कॉल किया जाता है और मैं अभिविन्यास परिवर्तन का पता लगा सकता हूं। यदि संभव हो तो मैं ऊंचाई को एनिमेट करना चाहता हूं क्योंकि दृश्य घूमता है, लेकिन मैं इसे एक संभावना के रूप में नहीं देख रहा हूं। –

+3

इस प्रश्न के मुताबिक: http://stackoverflow.com/questions/460014/can-you-animate-a-height-change-on-a-uitableviewcell-when- चयन किया गया है कि आप एनीमेशन को ' 'reloadData' –

11

@ दाऊद से ऊपर जवाब पर थोड़ा सुधार करने के लिए और कैसे एक रोटेशन के दौरान सुचारू रूप से यह चेतन करने के लिए, इस विधि का उपयोग के बारे में पिछले टिप्पणी जवाब देने के लिए:

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

और निश्चित रूप से ऊंचाई प्रतिनिधि विधि:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) { 
     return 171.0f; 
    } else { 
     return 128.0f; 
    } 
} 
+0

धन्यवाद! मैं पागल हो रहा था! कोई विचार क्यों स्थिति बैरऑरिएंटेशन काम करता है और अकेले अभिविन्यास तब नहीं करता जब आप पहली बार ऐप शुरू करते हैं? एक बार चलने के बाद, और अभिविन्यास बदलता है, दोनों ठीक काम करते हैं। – Jan

+0

यूआईडीवीस अभिविन्यास और UIInterface अभिविन्यास (स्टेटसबार से) समान नहीं हैं। UIDevice UIDeviceOrientationFaceUp (यानी आपका आईपैड एक टेबल पर फ्लैट बैठे) में हो सकता है - जो आपको नहीं बताता कि इंटरफ़ेस का अभिविन्यास क्या है, जो कि 4 में से कोई भी हो सकता है। – bandejapaisa

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