ios - autolayout-आधा पर्यवेक्षण ऊंचाई के सापेक्ष दृश्य की ऊंचाई बनाओ




(4)

हाल ही में ऑटोलाउट्स में शामिल हो रहे हैं और मैं वास्तव में मामूली समस्या उदाहरण की तरह दिखता हूं। मेरे पास एक दृश्य है कि मैं स्क्रीन के शीर्ष पर बैठना चाहता हूं, और स्क्रीन-ऊंचाई का आधा हिस्सा लेना चाहता हूं। ऑटोलायआउट से पहले सरल - बस इसे जगह में रखें और पर्यवेक्षक का आकार बदलते समय लंबवत विस्तार करने के लिए कहें।

अब, मैं अपने जीवन के लिए नहीं देख सकता कि यह कैसे करें। जब मैं इसे सेट अप करने का प्रयास करता हूं तो मुझे यह मिलता है:

नीचे की जगह बाधा "284 के बराबर" पर सेट है, जो कि जब मैं आईफोन 4 लेआउट में बदलता हूं, तो यह पूर्ण और बिल्कुल बेकार है, क्योंकि यह स्क्रीन के नीचे 284 अंक स्थान रखता है, और दृश्य को कम करता है और अब आधा नहीं होता है स्क्रीन का आकार और किसी भी अन्य दृश्य की ऊंचाई के कुछ अंश के बराबर उस बाधा को स्थापित करने का कोई तरीका नहीं है ..

थोड़ी देर के लिए संघर्ष करने के बाद, एकमात्र तरीका यह है कि मैं ऐसा करने के बारे में सोच सकता हूं, इस दृश्य के नीचे एक और दृश्य पेश करना होगा, उनकी ऊंचाइयों को समान रूप से पिन करें, उन्हें एक-दूसरे के ऊपर और नीचे बैठें और फिर दूसरा (नीचे) दृश्य अदृश्य हो .. जो थोड़ा बदसूरत लगता है!

क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है?..


थोड़ा और समय बाद मैं निम्नलिखित के साथ आया हूं।

मैं इसे एक उत्तर के रूप में देख रहा हूं लेकिन यह बहुत संतोषजनक नहीं है, क्योंकि ऐसा लगता है कि आप वास्तव में इंटरफ़ेस बिल्डर में ऐसा नहीं कर सकते हैं, लेकिन बाद में कोड में सही बाधा को जोड़ा जा सकता है:

- (void) viewWillAppear:(BOOL)animated
{

    NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:upperview
                                                                 attribute:NSLayoutAttributeHeight 
                                                                 relatedBy:0 
                                                                    toItem:self.view
                                                                 attribute:NSLayoutAttributeHeight
                                                                multiplier:.5 
                                                                  constant:0];
    [self.view addConstraint:constraint];

}

असल में, यह self.view की ऊंचाई के खिलाफ 0.5 का गुणक सेट करता है, अपरिवर्तनीय पर कार्य करता है। मुझे बाधाओं को तोड़ने के बारे में रनटाइम संदेशों के समूह से बचने के लिए 1000 से कम से कम आईबी में निचली लंबवत अंतरिक्ष बाधा की प्राथमिकता निर्धारित करना पड़ा।

तो अगर कोई यह दिखा सकता है कि इंटरफ़ेस बिल्डर में ऐसा कैसे किया जाए, तो यह मेरे प्रश्न का बेहतर उत्तर देगा, अन्यथा मुझे लगता है कि यह उतना अच्छा है जितना इसे प्राप्त होता है (अभी के लिए) ???


फ्योडोर वोल्च्योक के जवाब की तुलना में विधि से थोड़ा आसान और अधिक सीधे आगे। नियंत्रण बटन दबाएं और सबव्यू पर क्लिक करें। - कमांड बटन पर दबाए रखें, कर्सर को पर्यवेक्षण में खींचें, फिर पर्यवेक्षण पर क्लिक करें। "पहलू अनुपात" का चयन करें।

- फिर आकार निरीक्षक पर क्लिक करें। - फिर बाधा पर डबल क्लिक करें।

सुनिश्चित करें कि दोनों वस्तुओं के लिए "ऊंचाई" चुना गया है।

- फिर आधे स्क्रीन के लिए "गुणक" को 0.5 तक बदलें, या पर्यवेक्षण के जो भी अंश आप चाहते हैं।


यह अब आईबी में [कम से कम] एक्सकोड 5.1.1 के रूप में संभव है। हालांकि मुझे यह पता लगाने में कुछ समय लगा कि यह वास्तव में बहुत ही सरल है:

सबसे पहले मूल शीर्ष संरेखण बाधा बनाएं (आपको सामान्य, नीचे, बाएं और दाएं बाधाओं को भी सेट करने की आवश्यकता होगी)। फिर बाधा का चयन करें और विशेषता निरीक्षक पर नेविगेट करें:

फिर आप गुणक समायोजित कर सकते हैं। यदि आप चाहते हैं कि 50% सुपर व्यू इसे 1 पर छोड़ दें, क्योंकि यह सुपर के केंद्र के अनुसार गठबंधन है। यह उन दृश्यों को बनाने का भी एक शानदार तरीका है जो अन्य प्रतिशत भी हैं (जैसे 25% सुपर व्यू)


वहां कोड में एक और संभावना है यदि आपके पास 2 विचार हैं जो दोनों की समान ऊंचाई होनी चाहिए: केवल व्यू 2 की ऊंचाई को दृश्य 1 की ऊंचाई पर सेट करें (यहां की चाल स्पष्ट रूप से दृश्य 1 की ऊंचाई निर्धारित नहीं कर रही है)।

    [self.view addConstraints:[NSLayoutConstraint
        constraintsWithVisualFormat:@"V:[topLayoutGuide]-0-[_view1]-0-[_view2(==_view1)]-0-[bottomLayoutGuide]"
                            options:0
                            metrics:nil
                              views:viewsDict]];




autolayout