2014-09-24 11 views
9

यहाँ मेरी स्टोरीबोर्डiOS 8 आज विजेट संरेखण मुद्दा

enter image description here

मैं autolayout उपयोग कर रहा हूँ, और नहीं आकार वर्गों का उपयोग करना है।

जब मैं iPhone 5s पर भाग गया, यह ठीक काम करता है। (दोनों पोर्ट्रेट और लैंडस्केप) enter image description here

लेकिन जब मैं iPhone 6 प्लस (पोर्ट्रेट) पर यह भाग गया, यह ठीक से संरेखित नहीं है। enter image description here

आईफोन 6 प्लस (परिदृश्य) पर, यह बदतर है। enter image description here

मैं जानता हूँ कि मैं -widgetMarginInsetsForProposedMarginInsets: का उपयोग कर सकते मार्जिन सेट करने के लिए, लेकिन इस मामले में मैं हर डिवाइस के लिए मार्जिन को अनुकूलित करने की आवश्यकता होगी। यही कारण है कि भयानक होगा :(

तो वहाँ कम दर्दनाक खिताब के लिए subview संरेखित करने के लिए एक रास्ता है

+0

क्या आप ऑटो लेआउट का उपयोग कर रहे हैं? यदि ऐसा है, तो बस कंटेनर मार्जिन के साथ एक बाधा सेट करें। –

+0

लेकिन मार्जिन क्या है, यह अलग-अलग डिवाइस/अभिविन्यास – Keoros

+0

पर भिन्न होता है, मुझे लगता है कि सिस्टम प्रत्येक डिवाइस –

उत्तर

5

ऐसा लगता है कि आपको इसे मैन्युअल रूप से सेट करना है। आप इसे बाधा बनाकर कर सकते हैं, उसके बाद आईबीओलेट निर्दिष्ट कर सकते हैं, और डिवाइस/अभिविन्यास के आधार पर निरंतर सेट कर सकते हैं। 1 (2px)

  • 6 - - 1 (2px)
  • 6 प्लस चित्र - 5 (15px)
    • 5 एस:

      संदर्भ के लिए, मार्जिन मैंने पाया आप की जरूरत हैं

    • 6 प्लस परिदृश्य - 34 (102px)

    आप पा कर सकें कि आप विस्तार दृश्य के आकार का है, जो एक चित्र iPhone के लिए 414 पॉइंट है से की जरूरत है 6.

    +0

    पर ठीक काम करता है आईपैड परिदृश्य और चित्र के बारे में क्या? – Erich

    0

    आप विजेट मार्जिन अनुकूलित करने के लिए की जरूरत है:

    - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets; 
    

    प्रलेखन: https://developer.apple.com/library/ios/documentation/NotificationCenter/Reference/NCWidgetProviding_Protocol/index.html

    +4

    तो मुझे अलग-अलग 8 मानों को कस्टमाइज़ करना होगा?(आईफोन 5, आईफोन 6, आईफोन 6+, आईपैड, दोनों ओरिएंटेशन पर) – Keoros

    9

    किनारे के इन्सेट को शून्य पर सेट करना समस्या को ठीक करना चाहिए:

    - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
    { 
        return UIEdgeInsetsZero; 
    } 
    
    +0

    आईओएस 9 पर यह पूरी तरह से इन्सेट को हटा देता है और इससे भी बदतर दिखता है। –

    +0

    धन्यवाद ~ यह बहुत मदद करता है। आईओएस 9.1 –

    0

    कुछ उपकरणों के लिए ठीक करता है। एरिका UIDevice-Extension की आवश्यकता है।

    - (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets 
    { 
        defaultMarginInsets.bottom = 0; 
    
        if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) { 
         defaultMarginInsets.left += 5; 
        } else if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { 
         defaultMarginInsets.left += 34; 
        } else { 
         defaultMarginInsets.left += 1; 
        } 
    
        return defaultMarginInsets; 
    } 
    
    संबंधित मुद्दे