आज

2015-05-19 16 views
51

से आईपैड के लिए विस्तार ऊंचाई बहुत अधिक है, मेरे आज के विस्तार को विजेट प्रदर्शित करने वाली सामग्री के आधार पर गतिशील ऊंचाई की आवश्यकता है। मैं अपने निचले तत्व पर एक बाधा डालकर इसे प्राप्त करने में सक्षम था: नीचे लेआउट गाइड का शीर्ष नीचे के तत्व से नीचे या उसके बराबर है, 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

परिणाम:
enter image description here

अपेक्षित परिणाम:
enter image description here

समस्या:
बटन के सभी पर पहलू अनुपात की कमी परोक्ष रूप से एक 'अंतर्निहित' पहलू आरए लागू करना विजेट दृश्य की ऊंचाई पर टियो बाधा systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority: भेज दी जाती है, जहां इसे आवश्यक प्राथमिकता पर लेआउट के लिए आवश्यक चौड़ाई (724) और फिटिंग स्तर प्राथमिकता पर 0 की ऊंचाई (दृश्य को संपीड़ित करने के लिए) पारित किया जाता है। इसके परिणामस्वरूप आईपैड पर एक लंबा विजेट दृश्य होता है जहां दृश्य शुरू करने के लिए व्यापक होता है। लेकिन कोई वास्तविक पहलू-अनुपात बाधा नहीं है जिसे हटाया जा सकता है। अनिवार्य रूप से, क्योंकि मैंने सभी बटनों पर पहलू अनुपात की बाधाओं को लागू किया है, आज के विस्तार की ऊंचाई इसकी चौड़ाई (सभी बाधाओं को एक साथ, पहलू अनुपात और अन्यथा) पर निर्भर करती है। इस प्रकार विस्तार की ऊंचाई एक विस्तृत क्षेत्र में अनजाने में है, जो आईपैड जैसी विस्तृत डिवाइस पर प्रकट होती है। बटनों पर बाधाओं पर पुनर्विचार की आवश्यकता है, या किसी भी तरह समायोजित किया जाना चाहिए।

नमूना परियोजना:
एक sample project that demonstrates the issue ताकि आप डाउनलोड करने और इसके साथ खेल सकते हैं CloudApp से उपलब्ध है।

मैं क्या कोशिश की है:
मैं widgetMarginInsetsForProposedMarginInsets अधिभावी और नीचे के लिए 0 वापस लौट कर डिफ़ॉल्ट मार्जिन सन्निवेश को दूर करने की कोशिश की। इसने डिफ़ॉल्ट पैडिंग को हटा दिया, इसलिए ऊंचाई को थोड़ा कम कर दिया, लेकिन इसके नीचे अभी भी बहुत सी अतिरिक्त जगह है।

UILabel उस पर एक बाधा थी: लेबल की superview के अग्रणी के बराबर अग्रणी - निरंतर 0, प्राथमिकता 1000, गुणक 1. मैं बस उस superview के अग्रणी मार्जिन को बदलते हैं, तो अतिरिक्त तल जादुई रिक्ति गायब हो जाता है। मुझे आश्चर्य हुआ कि ऐसा इसलिए था क्योंकि तत्व बहुत बड़े हो रहे थे, इसलिए बाएं रिक्ति की मात्रा में वृद्धि उनके आकार को कम कर देगी, लेकिन मैंने इसे नियमित रूप से अग्रणी और निरंतर बढ़ने की कोशिश की और इस मुद्दे को हल नहीं किया। लेकिन यह केवल पोर्ट्रेट में आईपैड के लिए इस मुद्दे को हल करता है। और यह पूरी तरह से इसे हल नहीं करता है, हर बार जब आप अधिसूचना केंद्र खींचते हैं तो यह बड़ी ऊंचाई पर शुरू होता है और फिर उचित आकार तक गिर जाता है। परिदृश्य में यह उचित आकार में कभी भी कम नहीं होता है।

का प्रयास किया गया समाधान:

  • @Lefteris आकार, जो इस मामले ऊंचाई के रूप में में काम नहीं करेगा हार्डकोड प्रस्तावित गतिशील है और विजेट कई स्क्रीन आकार/झुकाव के लिए उपलब्ध है।
  • @Yuyutsu ने इसे हल करने का प्रयास किया, लेकिन दुर्भाग्य से यह आवश्यकताओं को पूरा नहीं करता है और विरोधाभासी बाधाओं और एक संशोधित लेआउट प्रदर्शित करता है।
+0

के बारे में मैं कुछ अजीब समस्याओं मिला कुछ दिन पहले आज की विस्तार की ऊंचाई, इस एफवाईआई को पढ़ें: http://stackoverflow.com/questions/26087907/height-of-ios8-today-extension-using-only-auto-layout-gives-broken-constraints – liushuaikobe

+0

आज़माएं अन्य कस्टम व्यू कंट्रोलर के सबव्यूव के रूप में एक्सटेंशन व्यू बनाना और उसके बाद viewDidLoad() लागू करें, इसे –

उत्तर

-1

मैं आदेश इसे ठीक करने में viewDidLoad प्रतिनिधि पद्धति पर विजेट का मूल्य हार्डकोड करने के लिए किया था:

import UIKit 
import NotificationCenter 

class TodayViewController: UIViewController, NCWidgetProviding { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.preferredContentSize = CGSize(width: 0, height: 320) 
    } 

} 
+1

पर काम करना चाहिए, इसे हार्ड कोड नहीं किया जा सकता है, इसे वास्तव में सामग्री के आधार पर ऊंचाई में गतिशील होना आवश्यक है। सभी आईफ़ोन और आईपैड और किसी अन्य भविष्य के स्क्रीन आकार के लिए काम करना चाहिए। – Joey

+0

ऊंचाई को हार्ड कोडिंग निश्चित रूप से कुछ स्थितियों में असफल हो जाएगी - उदाहरण के लिए, लैंडस्केप मोड में। इसे आज़माएं: मोबाइल सफारी चलाएं, लैंडस्केप मोड पर स्विच करें और फिर अधिसूचना केंद्र खोलें। –

0

मैं एक ही मुद्दे का सामना करना पड़ रहा था। क्या आपने छवि में दिखाए गए नीचे पैडिंग बाधा को जोड़ा है? enter image description here

कि me.Hope के लिए काम किया यह

2

enter image description here

में मदद करता है यहाँ यह लक्ष्य प्राप्त करने का तरीका बताया:

  1. आप अपने बाधा विचार करना चाहिए।

  2. आपका विजेट डिफ़ॉल्ट रूप मार्जिन सन्निवेश वाली ठीक से जिस तरह से आप यह वांछित पर कॉन्फ़िगर नहीं हैं, इसलिए अपने दम पर यह सेटिंग केवल वैकल्पिक हल 'widgetMarginInsetsForProposedMarginInsets:' फोन करके यहाँ है

// अद्यतन विजेट सन्निवेश

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets { 

    println(NSStringFromUIEdgeInsets(defaultMarginInsets)) 
    return UIEdgeInsetsMake(20, 20, 10, 20) 
} 

संशोधित नमूना फ़ाइल लिंक: Modified file

+0

बटनों को सही वर्ग होने की आवश्यकता है – Joey

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