से आईपैड के लिए विस्तार ऊंचाई बहुत अधिक है, मेरे आज के विस्तार को विजेट प्रदर्शित करने वाली सामग्री के आधार पर गतिशील ऊंचाई की आवश्यकता है। मैं अपने निचले तत्व पर एक बाधा डालकर इसे प्राप्त करने में सक्षम था: नीचे लेआउट गाइड का शीर्ष नीचे के तत्व से नीचे या उसके बराबर है, 0, प्राथमिकता 99 9, गुणक 1.आज
यह iPhones पर बिल्कुल अपेक्षित काम करता है - विजेट ऊंचाई सभी सामग्री फिट बैठती है और अगले विजेट दिखाए जाने से पहले डिफ़ॉल्ट नीचे मार्जिन लागू होता है।
लेकिन आईपैड पर यह मेरी विजेट की ऊंचाई को अधिकतम ऊंचाई के बराबर सेट कर रहा है अधिसूचना केंद्र विजेट को अनुमति देगा - मेरे विजेट के नीचे बहुत सी जगह है, यह लगभग पूर्ण स्क्रीन है।
मैं उस अतिरिक्त स्थान को कैसे हटा सकता हूं?
मुझे पता है कि समस्या क्या है, लेकिन मुझे यह सुनिश्चित नहीं है कि इसे कैसे हल किया जाए - "समस्या" खंड देखें। सबसे पहले मुझे सेटअप स्पष्ट करता हूं:
सेटअप:
मैं एक स्टोरीबोर्ड में इस विस्तार की दृष्टि की स्थापना की, कुछ भी नहीं प्रोग्राम के रूप में किया जाता है। दृश्य में 5 तत्व लंबवत रूप से ढेर होते हैं, और कुछ अन्य क्षैतिज होते हैं।
UILabel: height = 35, top space to top layout guide with constant of 10
UIButton: equal height and width to a different button (whose aspect ratio is 1:1, there is no fixed width/height), top space to label 10
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8, bottom space to bottom layout guide <= 0 with priority 999
आवश्यक व्यवहार::
- मैं का एक ग्रिड की जरूरत है जहां यह नहीं बताया प्राथमिकता 1000 है, गुणक 1 - ये ऊपर से नीचे तक कि खड़ी रेखा के लिए ऑटो लेआउट की कमी कर रहे हैं एक पूर्ण पूर्ण चौड़ाई लेबल के नीचे स्थित 4x4 बटन
- प्रत्येक बटन सटीक समान चौड़ाई और ऊंचाई होना चाहिए - सभी सही वर्ग
- अंतिम आर के नीचे कोई अतिरिक्त स्थान नहीं बटन के ow
परिणाम:
अपेक्षित परिणाम:
समस्या:
बटन के सभी पर पहलू अनुपात की कमी परोक्ष रूप से एक 'अंतर्निहित' पहलू आरए लागू करना विजेट दृश्य की ऊंचाई पर टियो बाधा systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:
भेज दी जाती है, जहां इसे आवश्यक प्राथमिकता पर लेआउट के लिए आवश्यक चौड़ाई (724) और फिटिंग स्तर प्राथमिकता पर 0 की ऊंचाई (दृश्य को संपीड़ित करने के लिए) पारित किया जाता है। इसके परिणामस्वरूप आईपैड पर एक लंबा विजेट दृश्य होता है जहां दृश्य शुरू करने के लिए व्यापक होता है। लेकिन कोई वास्तविक पहलू-अनुपात बाधा नहीं है जिसे हटाया जा सकता है। अनिवार्य रूप से, क्योंकि मैंने सभी बटनों पर पहलू अनुपात की बाधाओं को लागू किया है, आज के विस्तार की ऊंचाई इसकी चौड़ाई (सभी बाधाओं को एक साथ, पहलू अनुपात और अन्यथा) पर निर्भर करती है। इस प्रकार विस्तार की ऊंचाई एक विस्तृत क्षेत्र में अनजाने में है, जो आईपैड जैसी विस्तृत डिवाइस पर प्रकट होती है। बटनों पर बाधाओं पर पुनर्विचार की आवश्यकता है, या किसी भी तरह समायोजित किया जाना चाहिए।
नमूना परियोजना:
एक sample project that demonstrates the issue ताकि आप डाउनलोड करने और इसके साथ खेल सकते हैं CloudApp से उपलब्ध है।
मैं क्या कोशिश की है:
मैं widgetMarginInsetsForProposedMarginInsets
अधिभावी और नीचे के लिए 0
वापस लौट कर डिफ़ॉल्ट मार्जिन सन्निवेश को दूर करने की कोशिश की। इसने डिफ़ॉल्ट पैडिंग को हटा दिया, इसलिए ऊंचाई को थोड़ा कम कर दिया, लेकिन इसके नीचे अभी भी बहुत सी अतिरिक्त जगह है।
UILabel
उस पर एक बाधा थी: लेबल की superview के अग्रणी के बराबर अग्रणी - निरंतर 0, प्राथमिकता 1000, गुणक 1. मैं बस उस superview के अग्रणी मार्जिन को बदलते हैं, तो अतिरिक्त तल जादुई रिक्ति गायब हो जाता है। मुझे आश्चर्य हुआ कि ऐसा इसलिए था क्योंकि तत्व बहुत बड़े हो रहे थे, इसलिए बाएं रिक्ति की मात्रा में वृद्धि उनके आकार को कम कर देगी, लेकिन मैंने इसे नियमित रूप से अग्रणी और निरंतर बढ़ने की कोशिश की और इस मुद्दे को हल नहीं किया। लेकिन यह केवल पोर्ट्रेट में आईपैड के लिए इस मुद्दे को हल करता है। और यह पूरी तरह से इसे हल नहीं करता है, हर बार जब आप अधिसूचना केंद्र खींचते हैं तो यह बड़ी ऊंचाई पर शुरू होता है और फिर उचित आकार तक गिर जाता है। परिदृश्य में यह उचित आकार में कभी भी कम नहीं होता है।
का प्रयास किया गया समाधान:
- @Lefteris आकार, जो इस मामले ऊंचाई के रूप में में काम नहीं करेगा हार्डकोड प्रस्तावित गतिशील है और विजेट कई स्क्रीन आकार/झुकाव के लिए उपलब्ध है।
- @Yuyutsu ने इसे हल करने का प्रयास किया, लेकिन दुर्भाग्य से यह आवश्यकताओं को पूरा नहीं करता है और विरोधाभासी बाधाओं और एक संशोधित लेआउट प्रदर्शित करता है।
के बारे में मैं कुछ अजीब समस्याओं मिला कुछ दिन पहले आज की विस्तार की ऊंचाई, इस एफवाईआई को पढ़ें: http://stackoverflow.com/questions/26087907/height-of-ios8-today-extension-using-only-auto-layout-gives-broken-constraints – liushuaikobe
आज़माएं अन्य कस्टम व्यू कंट्रोलर के सबव्यूव के रूप में एक्सटेंशन व्यू बनाना और उसके बाद viewDidLoad() लागू करें, इसे –