उत्तर है [view layoutIfNeeded]
।
यहाँ पर क्यों:
आप अभी भी निरीक्षण करके view.bounds.size.width
और view.bounds.size.height
(या फ्रेम, जो तब तक बराबर है जब तक आप के साथ खेल रहे हों , दृश्य की वर्तमान चौड़ाई और ऊंचाई प्राप्त नहीं कर सकतेview.transform
) ।
यदि आप चाहते हैं कि आपके मौजूदा अवरोधों द्वारा निहित चौड़ाई और ऊंचाई है, तो इसका जवाब मैन्युअल रूप से बाधाओं का निरीक्षण नहीं करना है, क्योंकि आपको उन लोगों की व्याख्या करने के लिए ऑटो लेआउट सिस्टम के संपूर्ण बाधा-समाधान तर्क को फिर से लागू करना होगा। बाधाओं। इसके बजाय, आपको जो करना चाहिए वह उस लेआउट को अपडेट करने के लिए बस ऑटो लेआउट से पूछें , ताकि यह बाधाओं को हल करता है और सही समाधान के साथ view.bounds के मान को अपडेट करता है, और फिर आप view.bounds का निरीक्षण करते हैं।
आप लेआउट को अपडेट करने के लिए ऑटो लेआउट से कैसे पूछेंगे? कॉल[view setNeedsLayout]
यदि आप रन लूप के अगले मोड़ पर लेआउट को अपडेट करने के लिए ऑटो लेआउट चाहते हैं।
हालाँकि, यदि आप चाहते हैं कि यह लेआउट को तुरंत अपडेट करे, तो आप तुरंत अपने मौजूदा फ़ंक्शन के भीतर या बाद में रन लूप के मोड़ से पहले किसी अन्य बिंदु पर नए सीमा मूल्य तक पहुंच सकते हैं , फिर आपको कॉल करने की आवश्यकता है [view setNeedsLayout]
और [view layoutIfNeeded]
।
आपने दूसरा प्रश्न पूछा: "अगर मैं सीधे इसका संदर्भ नहीं रखता तो मैं ऊंचाई / चौड़ाई की बाधा कैसे बदल सकता हूं?"
यदि आप IB में अड़चन पैदा करते हैं, तो सबसे अच्छा उपाय है कि आप अपने व्यू कंट्रोलर या अपने विचार में एक IBOutlet बनाएं ताकि आपके पास इसका सीधा संदर्भ हो। यदि आपने कोड में बाधा बनाई है, तो आपको उस समय आंतरिक कमजोर संपत्ति में संदर्भ देना चाहिए जब आपने इसे बनाया था। यदि किसी और ने बाधा पैदा की है, तो आपको इसे देखने की जांच परख करके देखने की जरूरत है। दृश्य पर संपत्ति की संपत्ति, और संभवतः पूरे दृश्य पदानुक्रम, और तर्क को लागू करने के लिए जो महत्वपूर्ण NSLayoutConitraint पाता है। यह शायद जाने का गलत तरीका है, क्योंकि यह भी प्रभावी ढंग से आपको यह निर्धारित करने की आवश्यकता है कि किस विशेष बाधा ने सीमा का आकार निर्धारित किया है, जब उस प्रश्न का सरल उत्तर होने की गारंटी नहीं है। अंतिम सीमा मूल्य कई बाधाओं का एक बहुत जटिल प्रणाली के लिए समाधान हो सकता है,