कोई भी मेरे लिए पूरी तरह से काम किया, viewDidLoad
को छोड़कर, लेकिन वह नहीं प्रदर्शित करने के पक्ष प्रभाव पड़ता है जो दृश्य मैं एनिमेटेड होने के बाद तक चाहता हूं, जो खराब दिखता है।
viewDidLayoutSubviews
कोड कि autolayout पूरा किया जा रहा है पर निर्भर करता है चलाने के लिए सही जगह होना चाहिए, लेकिन के रूप में अन्य लोगों ने बताया है कि हाल के iOS संस्करण में कई बार कहा जाता है और आपको पता नहीं कर सकते हैं जो अंतिम कॉल है।
तो मैंने इसे एक छोटे से हैक के साथ हल किया। मेरी स्टोरीबोर्ड में, mySubview
इसके self.view
से छोटा होना चाहिए। लेकिन जब viewDidLayoutSubviews
पहली बार कहा जाता है, mySubview
अभी भी 600 की चौड़ाई है, जबकि self.view
सही ढंग से सेट किया गया प्रतीत होता है (यह एक आईफोन प्रोजेक्ट है)। तो मुझे बस इतना करना है कि बाद की कॉल मॉनीटर करें और सापेक्ष चौड़ाई की जांच करें। एक बार mySubview
self.view
से छोटा है, तो मुझे यकीन है कि इसे सही तरीके से निर्धारित किया गया है।
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if self.mySubview.bounds.size.width < self.view.bounds.size.width {
// mySubview's width became less than the view's width, so it is
// safe to assume it is now laid out correctly...
}
}
यह हार्ड-कोडेड संख्या पर निर्भर नहीं का लाभ दिया है, तो यह सभी iPhone फार्म कारकों पर काम कर सकते हैं, उदाहरण के लिए। बेशक यह सभी मामलों में या सभी उपकरणों पर एक पैनसिया नहीं हो सकता है, लेकिन सापेक्ष आकारों के समान चेक करने के लिए शायद कई सरल तरीके हैं।
और नहीं, हमें ऐसा करने की ज़रूरत नहीं है, लेकिन जब तक ऐप्पल हमें कुछ और विश्वसनीय कॉलबैक नहीं देता है, हम सब इसके साथ फंस गए हैं।
मैंने 'viewDidLoad' में संदेश लॉग करने का प्रयास किया। ऑटो लेआउट पूरा होने के बाद कौन सी विधि लागू की जाती है। कारण मैं पूछता हूं क्योंकि उपयोगकर्ता टेक्स्टव्यू के साथ बातचीत कर सकने से पहले चौड़ाई की गणना करना चाहता हूं। तो ऑब्जेक्ट विवरण लॉगिंग करने से bcuz की मदद नहीं हो सकती है, मैं कुछ अन्य गणना के लिए चौड़ाई का उपयोग करना चाहता हूं। – user1046037
नहीं, ऑटो व्यू से पहले 'viewDidLoad' होता है।एक दृश्य को किसी अन्य दृश्य में जोड़ने के बाद ऑटो लेआउट आलसी हो जाता है (जो 'व्यूविल्लएपियर' के तुरंत बाद होता है, लेकिन शायद 'viewDidAppear' से पहले विश्वसनीय नहीं है)। जानने का एकमात्र विश्वसनीय तरीका यह जानना है कि दृश्य नियंत्रक के दृश्य पर 'layoutSubviews' कब समाप्त होता है। – Jesper
फिर भी आप फ्रेम को पाने का प्रयास क्यों कर रहे हैं? यदि आप इसके आधार पर गणना करना चाहते हैं और स्वयं लेआउट करना चाहते हैं, तो आप शायद ऑटो लेआउट से जूझ रहे हैं। – Jesper