2012-09-21 32 views
8

मैं आईओएस 6 के लिए लक्षित परियोजना पर काम कर रहा हूं जो स्टोरीबोर्ड और ऑटो लेआउट का लाभ उठाता है। स्टोरीबोर्ड में कई जगहें हैं जहां एक यूआईटीबल व्यू को व्यू कंट्रोलर व्यू के सबव्यूव के रूप में जोड़ा जाता है। यह तालिका दृश्य स्टोरीबोर्ड से प्रोटोटाइप कोशिकाओं का उपयोग करता है।स्टोरीबोर्ड में UITableView रोटेशन पर सामग्री आकार अपडेट नहीं कर रहा है

जिस मुद्दे में हम चल रहे हैं वह यह है कि यदि दृश्य नियंत्रक प्रारंभ में लैंडस्केप ओरिएंटेशन में लोड होता है और डिवाइस को पोर्ट्रेट पर घुमाया जाता है, तो तालिका दृश्य लंबवत और क्षैतिज दोनों स्क्रॉल करना शुरू कर देता है। तालिका दृश्य कक्षों को सही आयामों के साथ खींचा जाता है लेकिन दाईं ओर अतिरिक्त सफेद स्थान होता है।

ऐसा प्रतीत होता है कि तालिका दृश्य के फ्रेम और सीमाओं को रोटेशन पर सही आकार में अपडेट किया जा रहा है, तालिका सामग्री सामग्री का आकार नहीं है। किसी भी अद्यतन रोटेशन के बावजूद सामग्री का आकार समान आयाम बना रहता है।

यदि समस्याग्रस्त तालिका दृश्य कक्षों का उपयोग किया जाता है तो समस्या स्वयं उपस्थित नहीं होती है। मुझे कुछ गड़बड़ के काम मिल गए हैं, 1.) रीलोडडेटा या रीलोड लोड करने के लिए कॉल करेंअट इंडेक्सपैथ: withRowAnimation: 2.) मैन्युअल रूप से संपत्ति सामग्री सेट करना। आकार।

इनमें से दोनों आदर्श से कम प्रतीत होते हैं।

मैंने यह link to a dead simple sample project जोड़ा है जो इस समस्या को दर्शाता है। स्टोरीबोर्ड और मुख्य दृश्य नियंत्रकों के कार्यान्वयन के लिए किए गए एकमात्र परिवर्तन हैं।

रोटेशन Before rotation पहले

रोटेशन After rotation

+0

मैं उलझन में हूं। आपके उदाहरण में यह काम करता प्रतीत होता है। – mkral

+0

@ mkral यह एक्सकोड 4.5 चलाते समय मेरे लिए टूट गया है। यदि आप परिदृश्य में ऐप लॉन्च करते हैं, तो पोर्ट्रेट पर घुमाएं, तो तालिका दृश्य लंबवत और क्षैतिज दोनों स्क्रॉल करेगा। – Paul

+0

ठीक है, मैं गूंगा हूँ। मैं चित्र-से-परिदृश्य समस्या था। मैं कभी वापस नहीं गया। – mkral

उत्तर

6

मैं एक ही समस्या हो रही है के बाद - नहीं इस से संबंधित किसी भी दस्तावेज जवाब खोजने के लिए लगता है कर सकते हैं।

- (void) viewWillLayoutSubviews 
{ 
    self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.height, self.tableView.contentSize.height); 
} 
+0

मैं इस मुद्दे को अपने मुद्दे के लिए नहीं कर सकता। मैं मास्टर-विस्तार लेआउट में मूल रूप से एक ही समस्या देख रहा हूं। मेरे पास विस्तार नियंत्रक में UIViewController है, जिसमें एक तालिकादृश्य शामिल है। जब मैं आईपैड घुमाता हूं, तो टेबलव्यू बस आकार बदल नहीं पाएगा। –

+0

मैं रे वेंडरलिच के आईओएस 6 ट्यूटोरियल पढ़ रहा हूं, और ऑटो-लेआउट सामग्री में टेबल के बारे में कुछ विशिष्ट है। अभी तक इसे आजमाया नहीं है, लेकिन ऐसा लगता है कि टेबल सामान को वास्तव में अलग से सेट अप किया जाना चाहिए, और फिर UIViewController में एक कंटेनर में लोड किया जाना चाहिए। मुझे इस बारे में निश्चित नहीं है। इस दोपहर बाद में इसे पाने की उम्मीद है। अगर मुझे कुछ भी निश्चित लगता है, तो मैं यहां अपडेट करूंगा। –

+0

** का उपयोग करने का प्रयास करें (void) viewDidLayoutSubviews { [सुपर व्यूडिडआउटआउट्यूब्यूज]; self.tableView.contentSize = CGSizeMake (self.tableView.frame.size.height, self.tableView.contentSize.height);} ** –

1

मैं आज इस मुद्दे में पड़ गए और एप्पल के साथ एक बग रिपोर्ट दायर की: मैं मैन्युअल UITableView contentSize को संशोधित करने की तरह आपका उल्लेख समाप्त हो गया।

दिखाता है कि यदि आप यूआई तत्व और ऑटोलाउट के साथ एक कस्टम सेल का उपयोग कर रहे हैं, तो UIScrollView सामग्री आकार में समस्याएं हैं।

यदि आप सभी यूआई तत्वों को हटाते हैं, या ऑटोलायआउट बंद करते हैं, या फैक्ट्री सेल (मूल, आदि) का उपयोग करते हैं, तो सभी ठीक काम करते हैं।

-1

वही समस्या मैंने अपनी परियोजना में सुधार किया है। मुझे लगता है कि यह स्टोरीबोर्ड में एक बग है।

तब मैं

tableview.contentsize = CGSizeMake(tableview.width, tableview.contentsize.height); 

आशा यह आपके लिए के रूप में अच्छी तरह से काम करेगा निर्धारित करके willAutorotate विधि में मैनुअल कोडिंग से इसे हल कर दिया है।

यदि आपको इसके बारे में कोई सेब दस्तावेज मिलता है तो कृपया मुझे भी अपडेट करें। तब तक आप एक ही समाधान का उपयोग कर सकते हैं।

+0

कौन सा लिंक? तुम क्या कहना चाहते हो? – Mrunal

0

दिखाता है कि यदि आप यूआई तत्व और ऑटोलाउट के साथ एक कस्टम सेल का उपयोग कर रहे हैं, तो UIScrollView सामग्री आकार में समस्याएं हैं।

मुझे अपने कस्टम UITableViewCells के लिए ऑटोलायआउट बंद करना था ताकि डेटा अपडेट करने के बाद नीचे स्क्रॉल करने में सक्षम हो और फिर [self.tableView reloadData]।

ऑटोलाउट चालू होने के साथ, tableView.contentSize अपडेट किया जा रहा था, लेकिन जब भी मैं डिवाइस घुमाता था तब भी मैं नीचे तक स्क्रॉल करने में सक्षम नहीं था।

1

मुझे एक ही समस्या थी ... मुझे this लिंक मिला। जब मैंने इसे कार्यान्वित करने की कोशिश की तो मुझे अपने दृश्य के लिए ऑटो-साइजिंग विशेषताओं को नहीं मिला, फिर मैंने Master View Controller पर क्लिक किया और फिर File Inspector पर क्लिक किया और Use Autolayout अनचेक करें और फिर Attributes inspector पर ऑटो-रीसाइजिंग होना चाहिए तो आप गुणों को कैसे बदल सकते हैं आप यह चाहते हैं। मुझे यकीन है कि आप इस यह पता लगाने की प्रबंधित किया हो हूँ, लेकिन मैं उम्मीद है कि इस किसी और में मदद मिलेगी ... :)

0

मैंने पाया मेरे लिए काम करने के लिए निम्न:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.width, self.tableView.contentSize.height); 
    }); 
} 

सूचना async प्रेषण: यदि वह लाइन सिंक्रनाइज़ तरीके से निष्पादित की जाएगी तो सामग्री आकार परिवर्तन वर्तमान पूरा होने से पहले एक और लेआउट पास ट्रिगर करेगा। यह एक अपवाद ट्रिगर करता है:

ऑटो लेआउट को अभी भी नियंत्रक देखने के लिए -viewDidLayoutSubviews भेजने के बाद आवश्यक है।

0

की उपयोग ने मुझे मदद की। चूंकि आप स्टोरीबोर्ड का उपयोग कर रहे हैं, इसलिए सभी किनारों के लिए बाधाओं को सेट करना वास्तव में आसान है, इसलिए UITableView हमेशा डिवाइस व्यूअरेशन के बावजूद पूरे व्यू कंट्रोलर (निश्चित रूप से यदि UITableView पूरे व्यू कंट्रोलर भरता है) भर देगा।