दिलचस्प पोस्ट
सी / सी ++ में सर्वश्रेष्ठ एन्क्रिप्शन लाइब्रेरी क्या है? JTable की टेबल कॉलम में एकाधिक जेपीप्रदर्शन बार जोड़ना क्या वीबी.नेट में एक सशर्त त्रिगुट ऑपरेटर है? मेरे स्ट्रिंग के कुछ हिस्सों को कैसे बदलें? एकाधिक कॉलम से अधिक दूरी की गिनती आप एक गतिविधि से दूसरे स्ट्रिंग को कैसे पारित करते हैं? एएसपी.नेट कोर एमवीसी में टैग हेल्पर का चयन करें SYSTEM_ALERT_WINDOW – एंड्रॉइड 6.0 और लक्ष्य पर स्वचालित रूप से इस अनुमति को कैसे प्राप्त करें SDKVersion 23 एक विशिष्ट सूचकांक में एक आइटम को कैसे सरणी में डालें? सरलतम Socket.io उदाहरण का एक उदाहरण क्या है? मूल्य के बजाय कॉन्फ्रेंस संदर्भ से क्यों पास करें? ऐप पुन: आरंभ होता है, फिर से शुरू होता है जावा में http फ़ाइल डाउनलोड फिर से शुरू करें लिंक को क्लिक करने के बाद फ़ाइल को सहेजने के लिए एक ब्राउज़र को बल दें एक वेबसाइट का परीक्षण करने का सबसे अच्छा तरीका

आईओएस ऑटोलायआउट – फ़्रेम आकार चौड़ाई प्राप्त करें

मैं iOS 6 ऑटो लेआउट का उपयोग कर विकसित कर रहा हूं

मैं दृश्य के फ्रेम की चौड़ाई प्रदर्शित करने वाला संदेश लॉग करना चाहता हूं।

मैं स्क्रीन पर textView देख सकता हूँ

लेकिन मुझे चौड़ाई और ऊंचाई शून्य मिलती है, क्या मैं कुछ भूल रहा हूँ?

NSLog(@"textView = %p", self.textView); NSLog(@"height = %f", self.textView.frame.size.height); NSLog(@"width = %f", self.textView.frame.size.width); textView = 0x882de00 height = 0.000000 width = 0.000000 

वेब के समाधान से एकत्रित समाधान "आईओएस ऑटोलायआउट – फ़्रेम आकार चौड़ाई प्राप्त करें"

मुझे लगता है कि जब आप इसे कॉल करते हैं तब तक स्वत: लेआउट में आपके विचारों को ले जाने का समय नहीं होता है। ऑटो लेआउट समय दृश्य से नहीं हुआ है, क्योंकि इसे केवल विचारों के लोड होने के बाद कहा जाता है, और उसके बाद ही दृश्य दृश्य नियंत्रक के दृश्य पदानुक्रम में रखा जाता है और अंत में (दृश्य के layoutSubviews है)।

संपादित करें: यह उत्तर बताता है कि प्रश्न में परिदृश्य क्यों काम नहीं करता। @ सपेंज़ोर का जवाब बताता है कि इसे हल करने के लिए आपका कोड कहां रखें

दरअसल, ऊपर दिए गए उत्तर बिल्कुल सही नहीं हैं मैं उनका पीछा किया और फिर बार-बार शून्य मिला।

चाल आपके फ्रेम-आश्रित कोड को viewDidLayoutSubviews विधि में रखने के लिए है, जो कि

दृश्य नियंत्रक को सूचित करता है कि उसके विचार ने इसके उप-दृश्यों को निर्धारित किया है।

यह मत भूलो कि इस पद्धति को कई बार कहा जाता है और यह दृश्य नियंत्रक के जीवन चक्र का हिस्सा नहीं है, इसलिए इस का उपयोग करते समय सावधान रहें।

आशा है कि यह किसी के लिए उपयोगी होगा

बस जोड़ना चाहते थे, कि मेरे कार्यक्रम के लिए बिना लैंडस्केप मोड वाले ऑटो लेआउट का उपयोग करना आसान था … मैंने कोशिश की, हालांकि = डी

उपाय

  • उस कोड को देखने के लिए viewDidAppear रखें

कारण

  • viewDidLoad पूरा होने से पहले दृश्यडायडलोड होता है। इसलिए स्थिति अभी तक autolayout द्वारा निर्धारित नहीं है जिसे xib में निर्दिष्ट किया गया था
  • viewDidAppear बाद आइडिया ऑपरेटर पूरा हो गया है।

अपने दृश्य में शामिल करेंडिडलोड ()

 self.view.setNeedsLayout() self.view.layoutIfNeeded() 

अपनी अवलोकन। फ्रेम.size.width तक पहुंचने से पहले

असल में मैंने अपने कोड को viewDidLoad के भीतर लेआउट अपडेट करने के लिए बाध्य किया है:

 override func viewDidLoad() { super.viewDidLoad() println("bounds before \(self.previewContainer.bounds)"); //on iPhone 6 plus -> prints bounds before (0.0,0.0,320.0,320.0) self.view.setNeedsLayout() self.view.layoutIfNeeded() println("bounds after \(self.previewContainer.bounds)"); //on iPhone 6 plus -> prints bounds after (0.0,0.0,414.0,414.0) //Size dependent code works here self.create() } 

अद्यतनः यह अब और काम नहीं करता है

यह वास्तव में अजीब फीचर है लेकिन मैंने पाया:

यदि आप लेआउटउप दृश्य विधि का उपयोग किए बिना फ़्रेम प्राप्त करना चाहते हैं, तो इसका उपयोग करें:

 dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"View frame: %@", NSStringFromCGRect(view.frame)); }); 

यह वाकई अजीब है !!!

उपरोक्त उत्तरों में से कोई भी मेरे लिए पूरी तरह से काम नहीं करता है, लेकिन इसे देखने के अलावा viewDidLoad लेकिन उस दृश्य को प्रदर्शित नहीं करने का साइड इफेक्ट है, जब तक कि दृश्य में एनिमेटेड नहीं हो जाता है, जो खराब दिखता है।

viewDidLayoutSubviews कोड को चलाने के लिए सही स्थान होना चाहिए, जो कि autolayout पर निर्भर होता है, लेकिन जैसा कि अन्य लोगों ने बताया है कि इसे हाल के आईओएस संस्करणों में कई बार कहा जाता है और आप यह नहीं जान सकते कि अंतिम कॉल क्या है।

इसलिए मैंने इसे एक छोटे से हैक के साथ हल किया। मेरे स्टोरीबोर्ड में, mySubview अपने mySubview से छोटा होना चाहिए लेकिन जब viewDidLayoutSubviews को पहली बार बुलाया जाता है, तो mySubview पास 600 की चौड़ाई है, जबकि self.view को सही तरीके से सेट किया गया लगता है (यह एक आईफोन प्रोजेक्ट है)। इसलिए मुझे जो करना है, वह बाद के कॉल की निगरानी करता है और संबंधित चौड़ाई की जांच करता है। एक बार mySubview से छोटा है मुझे यकीन है कि यह सही ढंग से बाहर रखा गया है हो सकता है

 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... } } 

इसमें कड़ी मेहनत वाले नंबरों पर निर्भर नहीं होने का फायदा है, इसलिए यह सभी आईफ़ोन फॉर्म कारकों पर काम कर सकता है, उदाहरण के लिए बेशक यह सभी मामलों में या सभी उपकरणों पर एक रामबाण नहीं हो सकता है, लेकिन संभवतः रिश्तेदार आकारों की इसी तरह की जांच करने के लिए कई सरल तरीके हैं।

और नहीं, हमें ऐसा करने के लिए नहीं होना चाहिए, लेकिन जब तक ऐप्पल हमें कुछ और विश्वसनीय कॉलबैक न दें, हम सभी इसके साथ अटक जाते हैं।

आईओएस ऑटोलायआउट – फ़्रेम आकार चौड़ाई प्राप्त करें

  -(void) layoutSubviews{ [self layoutIfNeeded]; //right you code to set frame its will work to get frame and set frame. CALayer *bottomBorder = [CALayer layer]; bottomBorder.frame = CGRectMake(0.0f, bkView.frame.size.height - 1, bkView.frame.size.width, 1.0f); bottomBorder.backgroundColor = [UIColor blackColor].CGColor; [bkView.layer addSublayer:bottomBorder]; } 

आप पहले लेआउट पास के बाद केवल आकार का पता लगा सकते हैं। या बस विधि के नीचे कॉल करें तो आपके पास वास्तविक चौड़ाई देखने के बाद।

 [yourView layoutIfNeeded];