मैं viewDidLoad
/ loadView
(मैं iOS> = 6 को लक्षित कर रहा हूं) में अपनी बाधाओं को सेट करता हूं । updateViewConstraints
बाधाओं के बदलते मूल्यों के लिए उपयोगी है, उदाहरण के लिए अगर कुछ बाधा स्क्रीन के उन्मुखीकरण पर निर्भर है (मुझे पता है, यह एक बुरा अभ्यास है) तो आप constant
इस पद्धति में इसे बदल सकते हैं ।
39:22 से शुरू होने वाले viewDidLoad
सत्र "iOS और OS X के लिए ऑटो लेआउट का परिचय" (WWDC 2012) के दौरान बाधाओं को जोड़ना दिखाया गया है । मुझे लगता है कि यह उन चीजों में से एक है जो व्याख्यान के दौरान कही जाती हैं, लेकिन दस्तावेज में नहीं आती हैं।
अद्यतन: मैंने देखा है कि नियंत्रकों में संसाधन प्रबंधन में बाधाओं की स्थापना का उल्लेख है :
यदि आप स्टोरीबोर्ड का उपयोग करने के बजाय, प्रोग्रामेटिक रूप से व्यू बनाना पसंद करते हैं, तो आप ऐसा अपने व्यू कंट्रोलर के loadView
तरीके को ओवरराइड करके करते हैं । इस पद्धति का आपका कार्यान्वयन निम्नलिखित कार्य करना चाहिए:
(...)
3. यदि आप ऑटो लेआउट का उपयोग कर रहे हैं, तो अपने विचारों की स्थिति और आकार को नियंत्रित करने के लिए आपके द्वारा बनाए गए प्रत्येक दृश्य के लिए पर्याप्त बाधाओं को असाइन करें । अन्यथा, दृश्य पदानुक्रम में उप-फ़्रेमों को समायोजित करने के लिए viewWillLayoutSubviews
और
viewDidLayoutSubviews
विधियों को लागू करें । देखें "कंट्रोलर के दृश्य का आकार बदलना।"
अद्यतन 2 : WWDC 2015 के दौरान एप्पल एक नया स्पष्टीकरण दे दिया की updateConstraints
और updateViewConstraints
सिफारिश उपयोग:
वास्तव में, यह सब विचारों के लिए अगले लेआउट पास के लिए समय में बाधाओं को बदलने का मौका देने का एक तरीका है, लेकिन इसकी वास्तव में आवश्यकता नहीं है।
आपके सभी प्रारंभिक बाधा सेटअप आदर्श रूप से इंटरफ़ेस बिल्डर के अंदर होने चाहिए।
या यदि आप वास्तव में यह पाते हैं कि आपको अपने अवरोधों को प्रोग्रामेटिक रूप से आवंटित करने की आवश्यकता है, तो कुछ जगह जैसे कि व्यूडालैड बहुत बेहतर है।
अपडेट की कमी वास्तव में सिर्फ उस काम के लिए है जिसे समय-समय पर दोहराया जाना चाहिए।
इसके अलावा, जब आप ऐसा करने की आवश्यकता पाते हैं तो बस बाधाओं को बदलना बहुत आसान है; जबकि, यदि आप उस तर्क को उस दूसरे कोड से अलग लेते हैं जो उससे संबंधित है और आप इसे एक अलग विधि में स्थानांतरित करते हैं जो बाद के समय में निष्पादित हो जाता है, तो आपका कोड अनुसरण करना बहुत कठिन हो जाता है, इसलिए इसे बनाए रखना आपके लिए कठिन होगा , यह अन्य लोगों को समझने के लिए बहुत कठिन होगा।
तो आपको अपडेट बाधाओं का उपयोग करने की आवश्यकता कब होगी?
खैर, यह प्रदर्शन के लिए उबलता है।
यदि आप पाते हैं कि बस अपनी बाधाओं को जगह में बदलना बहुत धीमा है, तो अद्यतन बाधाएं आपकी मदद करने में सक्षम हो सकती हैं।
यह पता चला है कि अद्यतन बाधाओं के अंदर एक बाधा को बदलना वास्तव में अन्य समय में एक बाधा को बदलने से तेज है।
इसका कारण यह है क्योंकि इंजन बैच के रूप में इस पास में होने वाले सभी बाधा परिवर्तनों का इलाज करने में सक्षम है।