दिलचस्प पोस्ट
अपवाद java.sql.SQLException: श्रेणी के बाहर पैरामीटर इंडेक्स (1> पैरामीटर की संख्या, जो 0 है) आईफोन ऑडियो प्लेबैक: आंतरिक स्पीकर के माध्यम से मजबूर? इकाई फ़्रेमवर्क 6: ऑडिट / ट्रैक परिवर्तन Django को विशिष्ट क्रम में आईडी के सरणी से QuerySet मिलता है क्या मैं पीडीपी में जीडी पुस्तकालय का उपयोग कर छवि में रंगों को स्वैप कर सकता हूं? जावा गतिशील फ़ंक्शन कॉलिंग कई एसएसपी कुंजी के साथ कैसे काम करें सत्र में mysqli कनेक्शन php में पास नहीं कर सकते क्या मैं Android startActivity () संक्रमण एनीमेशन बदल सकता हूँ? सीएसएस चेकबॉक्स इनपुट स्टाइलिंग फायरबेज उपयोगकर्ता टेबल पर अतिरिक्त विवरण जोड़ें सी # में वर्तमान क्षेत्रीय सेटिंग्स कैसे प्राप्त करें? स्थानीय रेल विकास पर्यावरण में असली आईपी पता प्राप्त करें MongoDB – क्या डीबीआरईएफ आवश्यक है? PHP में दिनांक $ दिन जोड़ना

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

मैं 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 

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

मुझे लगता है कि जब आप इसे कॉल करते हैं तब तक स्वत: लेआउट में आपके विचारों को ले जाने का समय नहीं होता है। ऑटो लेआउट समय दृश्य से नहीं हुआ है, क्योंकि इसे केवल विचारों के लोड होने के बाद कहा जाता है, और उसके बाद ही दृश्य दृश्य नियंत्रक के दृश्य पदानुक्रम में रखा जाता है और अंत में (दृश्य के 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];