आप स्केल-टू-फिट का वर्णन नहीं कर रहे हैं; आप पहलू-फिट का वर्णन कर रहे हैं। (मैंने इस संबंध में आपके प्रश्न को संपादित कर दिया है।) इसके पहलू अनुपात को बनाए रखने और अपने माता-पिता के अंदर पूरी तरह से फिट रहने के दौरान सबव्यूशन जितना संभव हो सके।
वैसे भी, आप इसे ऑटो लेआउट के साथ कर सकते हैं। आप इसे पूरी तरह आईबी में Xcode 5.1 के रूप में कर सकते हैं। आइए कुछ विचारों से शुरू करें:
हल्के हरे रंग के दृश्य का अनुपात 4: 1 है। गहरे हरे रंग के दृश्य का अनुपात 1: 4 है। मैं बाधाओं को स्थापित करने जा रहा हूं, ताकि नीले रंग का दृश्य स्क्रीन के शीर्ष आधे हिस्से में भर जाए, गुलाबी दृश्य स्क्रीन के निचले आधे हिस्से को भरता है, और प्रत्येक हरे रंग का दृश्य अपने पहलू अनुपात को बनाए रखते हुए और इसके फिटिंग के दौरान जितना संभव हो उतना फैलता है कंटेनर।
सबसे पहले, मैं नीले दृश्य के सभी चार पक्षों पर अवरोध पैदा करूँगा। मैं इसे प्रत्येक किनारे पर अपने निकटतम पड़ोसी को भेजूंगा, 0. की दूरी के साथ मैं मार्जिन बंद करना सुनिश्चित करता हूं:
ध्यान दें कि मैं अभी तक फ्रेम अपडेट नहीं करता हूं । मुझे बाधाओं को सेट करते समय विचारों के बीच कमरा छोड़ना आसान लगता है, और बस स्थिरांक को 0 (या जो भी) हाथ से सेट करें।
इसके बाद, मैं अपने निकटतम पड़ोसी को गुलाबी दृश्य के बाएं, नीचे और दाएं किनारों को पिन करता हूं। मुझे एक शीर्ष किनारे की बाधा को स्थापित करने की आवश्यकता नहीं है क्योंकि इसका शीर्ष किनारा पहले से ही नीले दृश्य के निचले किनारे पर विवश है।
मुझे गुलाबी और नीले रंग के विचारों के बीच एक समान ऊंचाई की बाधा की भी आवश्यकता है। यह उन्हें प्रत्येक स्क्रीन को आधा भरेगा:
अगर मैं Xcode को सभी फ़्रेमों को अपडेट करने के लिए कहता हूं, तो मुझे यह मिलता है:
इसलिए मैंने अब तक जो अड़चनें खड़ी की हैं, वे सही हैं। मैं इसे पूर्ववत करता हूं और हल्के हरे रंग के दृश्य पर काम शुरू करता हूं।
हल्के हरे रंग के दृश्य की फिटिंग के लिए पांच बाधाओं की आवश्यकता होती है:
- हल्के हरे रंग के दृश्य पर एक आवश्यक-प्राथमिकता वाला पहलू अनुपात बाधा। आप इस बाधा को Xcode 5.1 या बाद वाले xib या स्टोरीबोर्ड में बना सकते हैं।
- हल्के हरे रंग के दृश्य की चौड़ाई को सीमित करने वाला एक आवश्यक-प्राथमिकता वाला अवरोध इसके कंटेनर की चौड़ाई से कम या उसके बराबर होना चाहिए।
- हल्के हरे रंग के दृश्य की चौड़ाई निर्धारित करने वाला एक उच्च प्राथमिकता वाला अवरोध इसके कंटेनर की चौड़ाई के बराबर होना चाहिए।
- हल्के हरे रंग के दृश्य की ऊंचाई को सीमित करने वाला एक आवश्यक-प्राथमिकता वाला अवरोध इसके कंटेनर की ऊंचाई से कम या उसके बराबर होना चाहिए।
- एक उच्च-प्राथमिकता वाला अवरोधक अपने कंटेनर की ऊंचाई के बराबर हल्के हरे रंग के दृश्य की ऊंचाई निर्धारित करता है।
आइए दो चौड़ाई की बाधाओं पर विचार करें। कम-से-या-बराबर बाधा, अपने आप में, हल्के हरे रंग की दृष्टि की चौड़ाई निर्धारित करने के लिए पर्याप्त नहीं है; कई चौड़ाई बाधा फिट होगी। चूंकि अस्पष्टता है, इसलिए ऑटोलैयट एक समाधान चुनने की कोशिश करेगा जो अन्य (उच्च प्राथमिकता लेकिन आवश्यक नहीं) बाधा में त्रुटि को कम करता है। त्रुटि को कम करने का मतलब है कि कंटेनर की चौड़ाई को जितना संभव हो उतना करीब करना, जबकि आवश्यक कम-से-या-बराबर बाधा का उल्लंघन नहीं करना।
यही बात ऊंचाई की बाधा के साथ भी होती है। और चूंकि पहलू-अनुपात की कमी भी आवश्यक है, यह केवल एक धुरी के साथ सबव्यू के आकार को अधिकतम कर सकता है (जब तक कि कंटेनर में सबव्यू के समान पहलू अनुपात न हो)।
इसलिए पहले मैं पहलू अनुपात में अवरोध पैदा करता हूं:
फिर मैं कंटेनर के साथ बराबर चौड़ाई और ऊंचाई की कमी पैदा करता हूं:
मुझे इन बाधाओं को कम-से-या-बराबर बाधाओं के रूप में संपादित करने की आवश्यकता है:
अगला मुझे कंटेनर के साथ समान चौड़ाई और ऊंचाई की कमी का एक और सेट बनाने की आवश्यकता है:
और मुझे इन नई बाधाओं को आवश्यक प्राथमिकता से कम करने की आवश्यकता है:
अंत में, आपने अपने कंटेनर में उप-केंद्र के लिए कहा है, इसलिए मैं उन बाधाओं को स्थापित करूंगा:
अब, परीक्षण करने के लिए, मैं व्यू कंट्रोलर का चयन करूंगा और सभी फ्रेम को अपडेट करने के लिए Xcode पूछूंगा। यह वही है जो मुझे मिलता है:
ऊप्स! सबवे ने अपने कंटेनर को पूरी तरह से भरने के लिए विस्तार किया है। यदि मैं इसका चयन करता हूं, तो मैं देख सकता हूं कि वास्तव में इसने इसका पहलू अनुपात बनाए रखा है, लेकिन यह एक पहलू के बजाय एक पहलू भर रहा है- फिट ।
समस्या यह है कि कम-या-बराबर-बराबर बाधा पर, यह मायने रखता है कि बाधा के प्रत्येक छोर पर कौन सा दृश्य है, और Xcode ने मेरी अपेक्षा से विपरीत बाधा स्थापित की है। मैं दो बाधाओं में से प्रत्येक का चयन कर सकता हूं और इसके पहले और दूसरे आइटम को उलट सकता हूं। इसके बजाय, मैं सिर्फ सबव्यू का चयन करूंगा और बाधाओं को अधिक से अधिक या बराबर होने के लिए बदल दूंगा:
Xcode लेआउट को अपडेट करता है:
अब मैं नीचे की ओर गहरे हरे रंग के दृश्य के लिए सभी समान चीजें करता हूं। मुझे यह सुनिश्चित करने की आवश्यकता है कि इसका पहलू अनुपात 1: 4 है (एक्सकोड ने इसे अजीब तरीके से आकार दिया क्योंकि इसमें कोई बाधा नहीं थी)। मैं फिर से कदम नहीं दिखाऊंगा क्योंकि वे वही हैं। यहाँ परिणाम है:
अब मैं इसे आईफोन 4 एस सिम्युलेटर में चला सकता हूं, जिसमें आईबी की तुलना में एक अलग स्क्रीन का आकार है, और परीक्षण रोटेशन:
और मैं iPhone 6 सिम्युलेटर में परीक्षण कर सकता हूं:
मैंने अपनी सुविधा के लिए अपना अंतिम स्टोरीबोर्ड इस gist पर अपलोड कर दिया है ।