अब, इंटरफ़ेस बिल्डर उपयोगकर्ता को स्टोरीबोर्ड में प्रत्येक दृश्य नियंत्रक के आकार को गतिशील रूप से बदलने देता है, एक निश्चित डिवाइस के आकार का अनुकरण करने के लिए।
इस कार्यक्षमता से पहले, उपयोगकर्ता को मैन्युअल रूप से प्रत्येक दृश्य नियंत्रक आकार सेट करना चाहिए। इसलिए दृश्य नियंत्रक को एक निश्चित आकार के साथ सहेजा गया था, जिसका उपयोग initWithCoder
प्रारंभिक फ्रेम सेट करने के लिए किया गया था ।
अब, ऐसा लगता है कि initWithCoder
स्टोरीबोर्ड में परिभाषित आकार का उपयोग नहीं करते हैं, और 1000 मीटर 1000 px आकार को व्यूकंट्रोलर दृश्य और उसके सभी साक्षात्कारों के लिए परिभाषित करते हैं।
यह कोई समस्या नहीं है, क्योंकि विचारों को हमेशा इन लेआउट समाधानों में से किसी एक का उपयोग करना चाहिए:
autolayout, और सभी अड़चनें आपके विचारों को सही ढंग से लेआउट करेंगी
ऑटोरेस्पिरिंगमास्क, जो प्रत्येक दृश्य को लेआउट करेगा जिसमें कोई बाधा नहीं जुड़ी है ( नोट ऑटोलॉयआउट और मार्जिन की कमी अब एक ही दृश्य \ _ / में संगत है! )
लेकिन इस है दृश्य परत, की तरह से संबंधित सभी लेआउट सामान के लिए एक समस्या cornerRadius
है, न तो के बाद से autolayout है और न ही autoresizing मुखौटा परत प्रॉपर्टी पर लागू होती।
इस समस्या का उत्तर देने के लिए, viewDidLayoutSubviews
यदि आप नियंत्रक में हैं, या layoutSubview
यदि आप किसी दृश्य में हैं , तो इसका उपयोग करने का सामान्य तरीका है । इस बिंदु पर (अपने super
संबंधित तरीकों को कॉल करने के लिए मत भूलना ), आपको पूरा यकीन है कि सभी लेआउट सामान हो चुके हैं!
सुंदर हे यकीन है? हम ... पूरी तरह से, मैंने टिप्पणी की है, और इसीलिए मैंने यह सवाल पूछा है, कुछ मामलों में इस पद्धति पर अभी भी दृश्य का 1000x1000 आकार है। मुझे लगता है कि मेरे खुद के सवाल का कोई जवाब नहीं है। इसके बारे में अधिकतम जानकारी देने के लिए:
1- यह केवल कोशिकाओं को बिछाते समय ही खुश होता है! में UITableViewCell
और UICollectionViewCell
उपवर्गों, layoutSubview
नहीं कहा जा जाएगा के बाद subviews सही ढंग से बाहर रखी किया जाएगा।
2- जैसा कि @EugenDimboiu ने टिप्पणी की थी (कृपया अपने उत्तर को अपने लिए उपयोगी होने [myView layoutIfNeeded]
पर ), नॉट -आउट आउट सबव्यू पर कॉल करना, इसे समय में सही ढंग से लेआउट करेगा।
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel); // 1000x1000 size
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel); // normal size
}
3- मेरी राय में, यह निश्चित रूप से एक बग है। मैंने इसे रडार (आईडी 28562874) पर जमा किया है।
पुनश्च: मैं अंग्रेजी मूल निवासी नहीं हूं, इसलिए मेरे पोस्ट को संपादित करने के लिए स्वतंत्र महसूस करें यदि मेरा व्याकरण सही किया जाना चाहिए;)
PS2: यदि आपके पास कोई बेहतर उपाय है, तो बेझिझक दूसरा उत्तर न लिखें। मैं स्वीकृत उत्तर को स्थानांतरित करूँगा।