2011-03-30 11 views
20

मैं viewUITabBarController, UINavigationController या UIViewController से संबंधित कैसे समझता हूं, इन-कॉल स्टेटस बार को टॉगल करने पर प्रतिक्रिया करता है।
मेरे दिक्कत यह है कि वे अलग तरीके से व्यवहार करने लगते हैं और यह मेरे दुष्प्रभाव का कारण बनता है ....इन-कॉल स्टेटस बार कैसे UIViewController के दृश्य आकार को प्रभावित करता है? (और इसे सही तरीके से कैसे संभालें)

मैं एक परियोजना है कि इसके बाद के संस्करण 3 प्रकार के लिए खिड़की रूट दृश्य नियंत्रक परिवर्तन किए हैं और मैं description डंप फ्रेम निर्देशांक प्राप्त करने के लिए view का। बंद


  • UIViewController

enter image description here

incall स्थिति :

 
UIView: 0x4e2a1f0; frame = (0 20; 320 460); autoresize = W+H; .... 
पर
UIView: 0x4e2a1f0; frame = (0 40; 320 440); autoresize = W+H; ...

यह एक मैं समझता हूँ: जब incall स्थिति पट्टी दिखाई देता है, UIViewController के दृश्य की चौड़ाई सिकुड़ता है और 20 खो देता है, और 40.

20 से इसकी y coord चाल यही कारण है कि एकदम सही है! UITabBarController या UINavigationController के साथ क्लासिक UIViewController को प्रतिस्थापित करते समय मैं इसकी अपेक्षा करता हूं लेकिन ऐसा नहीं है!


  • UINavigationController

    enter image description here

InCall स्थिति पट्टी बंद

UILayoutContainerView: 0x4b35ab0; frame = (0 0; 320 480); autoresize = W+H; ..
पर

उस स्थिति में, UINavigationController द्वारा प्रबंधित दृश्य में फ्रेम फ्रेम को तब्दील करने पर इसकी फ्रेम गुणों में बदलाव नहीं होता है? (क्यों? :()


  • UITabBarController

enter image description here बंद

UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...
में के रूप में
UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...

उसी पर: UITabBarController का असर स्थिति बार बार टॉगल होने पर प्रभावित नहीं होता है।


क्या कोई मुझे बता सकता है कि इन्सल स्टेटस बार प्रदर्शित करते समय यह आकार कैसे काम करता है?
मेरा अंतिम लक्ष्य UIView प्रदर्शित करना है जो पूरे UITabBarController से ऊपर है और कॉल स्थिति स्थिति प्रदर्शित होने पर ठीक से आकार बदलता है। हालांकि, मुझे नहीं पता कि दृश्य पदानुक्रम में ऐसा दृष्टिकोण कहां रखा जाए: यदि मैं इसे UITabBarController के दृश्य के बच्चे के रूप में जोड़ता हूं, क्योंकि यह किसी भी स्थिति स्थिति प्रदर्शन पर प्रतिक्रिया नहीं करता है, तो मेरा भी प्रतिक्रिया नहीं करता है: (

+3

+1। –

उत्तर

17

देखने की ऊंचाई जब कॉल के दौरान स्थिति पट्टी चालू किए जाने पर जिस तरह से यह लंगर डाले है पर निर्भर करता है।

UIView की autoResizingMask को आजमाते को नियंत्रित कि क्या दृश्य नीचे बढ़ना चाहिए या आकार बदलने के लिए जब कॉल के दौरान स्थिति पट्टी प्रदर्शित करता है।

ये दो गुण,

UIViewAutoresizingFlexibleTopMargin 
UIViewAutoresizingFlexibleHeight 

आपकी मदद करेगा। पहला व्यक्ति दृश्य को धक्का देता है, दूसरा आकार बदलता है।

4

आपके नियमित UIViewController उदाहरण में [wantsFullScreenLayout] सेट है, जो दृश्य को स्वचालित रूप से आकार देने का कारण बनता है, इसलिए यह स्टेटस बार के नीचे नहीं जाता है।

दूसरी ओर, UINavigationController और UITabBarController, डिफ़ॉल्ट रूप से wantsFullScreenLayout हाँ। तो उनके विचार पूरी खिड़की लेते हैं, और वे आकार और स्थिति को अपने पट्टी को उचित रूप से स्टेटस बार को संभालने के लिए स्थिति देते हैं। यदि आप स्पष्ट रूप से इन नियंत्रकों पर संपत्ति को NO पर सेट करते हैं, तो आपको अपना इच्छित व्यवहार प्राप्त करना चाहिए (लेकिन यदि आप इसकी परवाह करते हैं तो wantsFullScreenLayout को YES पर सेट करने वाले बाल नियंत्रकों को सही तरीके से संभालने की क्षमता खो जाएगी)।

आपके UITabBarController उदाहरण में, बीटीडब्लू, ऐसा लगता है कि आप टैब बार नियंत्रक के दृश्य के लिए जानकारी प्रिंट नहीं कर रहे हैं; यहां एक UILayoutContainerView है, एक सादा UIView नहीं।

+0

हम, काफी रोचक टिप्पणी, मैं आपके संकेत की कोशिश करने जा रहा हूँ! बहुत बहुत धन्यवाद। – yonel

+0

यह मेरे लिए काम नहीं कर रहा था। – dacopenhagen

1

आदर्श रूप से आपको भूल जाना चाहिए कि दृश्य कितना राशि बदलता है और ऑटोरेसाइजिंग मास्क के साथ खेलता है। इस बारे में देखभाल करने के लिए

संबंधित मुद्दे