2012-12-19 19 views
5

संभव डुप्लिकेट:
UIViewController returns invalid frame?अलग subview लेआउट

डिबगिंग जबकि मैंने देखा है कि viewDidLoad में मेरे विचार फ्रेम फोन origin=(x=0, y=20) size=(width=320, height=460) जो सही नहीं है। viewWillAppear में इसे कॉल करें सही ढंग से सेट किया गया है: origin=(x=0, y=0) size=(width=320, height=416) नेविगेशन बार ऊंचाई को ध्यान में रखते हुए। मेरा सबव्यूज़ लेआउट रूट व्यू पर निर्भर करता है, लेकिन मैं उन्हें प्रत्येक बार सेट अप नहीं दिखाना चाहता हूं।

हमें इन दो कॉलों से कैसे निपटना चाहिए?

+0

उनके साथ डील करें जैसे आप हैं। -व्यूविल्लएपियर में सेटअप देखें, क्योंकि वह वह है जो एनएवी बार ऊंचाई के लिए खाता है, फिर -डिल्डलोड में प्रारंभ करें। – CodaFi

उत्तर

6

व्यू लेआउट से निपटने के लिए उचित स्थान UIViewController viewWillLayoutSubviews विधि में है। इसे तब भी कहा जाता है जब व्यू कंट्रोलर का दृश्य आकार दिया जाता है जैसे कि पहली बार दिखाया गया और घुमाए जाने पर।

जैसा कि आपने देखा है, दृश्य नियंत्रक का दृश्य पूरी तरह से आकार में नहीं आया है जब viewDidLoad कहा जाता है।

यदि आपको आईओएस 4.3 का समर्थन करने की आवश्यकता है तो आप viewWillLayoutSubviews का उपयोग नहीं कर सकते क्योंकि यह 5.0 में जोड़ा गया था। इस मामले में, viewWillAppear: में लेआउट करें।

+0

यह ध्यान दिया जाना चाहिए कि-viewWillAppear को विचार फ्रेम सेट होने से पहले बुलाया जा सकता है और खिड़की ने उन्मुखता समाप्त कर दी है। यदि आपको आईओएस 4 में इसकी ज़रूरत है तो आपको -DDDAppear कहने के लिए प्रतीक्षा करनी होगी। –