Xcode 6 में स्टोरीबोर्ड में "मार्जिन में कमी" क्या है


249

मैं ऑटोलेयूट और बाधाओं के साथ काम कर रहा हूं और पाया कि Constrain to marginsXcode 6 में एक विकल्प है जो Xcode 5 में मौजूद नहीं था और डिफ़ॉल्ट रूप से जांचा जाता है।

मैंने एक परीक्षण परियोजना बनाई, फिर मैंने UITableViewव्यू-कंट्रोलर पर एक फ्रेम के साथ एक ही आकार और दृश्य में जोड़ा बाधाओं पर जोड़ा

Xcode 6 आप यहाँ देख सकते हैं, हालांकि टेबलव्यू में एक ही फ्रेम है जैसा कि Xcode ऐड -16 को अड़चन के रूप में जोड़ने का सुझाव देता है जबकि Xcode 5 स्पेसिंग 0 को जोड़ने का सुझाव देगा।

बाधा के साथ मार्जिन की जाँच की

अब जब आप "कांस्ट्रेन टू मार्जिन" विकल्प को अनचेक करते हैं तो यह Xcode 5 के समान होता है और यह 0 को बाधा के रूप में जोड़ने का सुझाव देगा

अनियंत्रित हाशिये पर विवशता के साथ

इसके अलावा, मैंने पाया कि एक बार जब मैंने कांस्ट्रेन के साथ कांस्ट्रेक्ट को मार्जिन चेक किया तो मैं अब Xcode 5 में स्टोरीबोर्ड फ़ाइल को खोलने में सक्षम नहीं हूं, इसलिए यह Xcode 6 में निश्चित रूप से कुछ नया है

उम्मीद है, मैं अपने प्रश्न को ठीक से समझाने में सक्षम हूं। मैं यह समझना चाहूंगा कि "कांस्ट्रेन टू मार्जिन" वास्तव में क्या करता है और मुझे इसका उपयोग कब करना चाहिए और क्या नहीं करना चाहिए। मैं माफी माँगता हूँ अगर यह कुछ बहुत ही सरल और स्पष्ट है।

संपादित करें

मुझे यहां चर्चा में लेआउट मार्जिन के बारे में कुछ मिला , मुझे आश्चर्य है कि क्या यह इस से संबंधित है।


15
माफी मांगने की जरूरत नहीं है - यह स्पष्ट नहीं है कि वह क्या करता है।
बेन क्लेटन

4
+1 को माफी मांगने की आवश्यकता नहीं है, मैं यह सवाल पूछना चाहता था। BTW: Xcode5 में स्टोरीबोर्ड खोलने के लिए एक नज़र है: stackoverflow.com/a/25298909/529243
ओलाफ

1
यह मैंने पाया है कि एक स्पष्टीकरण के लिए निकटतम चीज है: stackoverflow.com/questions/25275901/…
Nathaniel

इसे कैसे निष्क्रिय करें?
ऑर्केन्स्टीन ऑक्ट

2
हाँ असली दर्द है। मैं यह पता लगाने में सक्षम नहीं हूं कि इसे कैसे स्थायी रूप से अनचेक किया जाए।
भूमित मेहता

जवाबों:


315

मुझे इस बात की बिल्कुल भी समझ नहीं है कि लोग शिकायत क्यों कर रहे हैं कि " मार्जिन iOS 8 से पहले किसी भी चीज पर एक समान दुर्घटना का कारण होगा। "

एक xib फ़ाइल या स्टोरीबोर्ड में अपने बाधाओं मार्जिन के सापेक्ष स्थापना नहीं करता iOS7 पर अपने ऐप दुर्घटना बनाने के लिए, और यह नहीं करता है अपने iOS7 डिवाइस पर एक यूआई फर्क न, जब तक कि आप को स्पर्श नहीं करते के रूप में UIView.layoutMarginsऔरUIView.preservesSuperviewLayoutMargins अपने कोड में गुण।

IOS8 में मार्जिन क्या है

लेआउट मार्जिन एक इंटीरियर के चारों ओर पैडिंग का प्रतिनिधित्व करता है UIViewजो कि लेआउट सिस्टम का उपयोग कर सकता है जब सब-आउट लेट हो - यह सुनिश्चित करने के लिए कि एक दृश्य और एक सबव्यू के किनारे के बीच एक अंतर छोड़ा जाता है। इस संबंध में यह बहुत हद तक सीएसएस में ब्लॉकों से जुड़ी गद्दी संपत्ति की तरह है।

यहां छवि विवरण दर्ज करें

डिफ़ॉल्ट रूप से, UIViewप्रत्येक पक्ष पर 8 बिंदुओं का लेआउट मार्जिन होता है, और इसे इंटरफ़ेस बिल्डर में नहीं बदला जा सकता है । हालांकि, UIView.layoutMarginsकोड में संपत्ति सेट करके , जो केवल iOS8 पर उपलब्ध है, आप इन मूल्यों को समायोजित करने में सक्षम हैं।

आप संपादक> कैनवास> लेआउट लेआउट आयतों के साथ मार्जिन प्रदर्शित करने के लिए आईबी प्राप्त कर सकते हैं : यहां छवि विवरण दर्ज करें

मार्जिन का उपयोग आपके विचारों और साक्षात्कारों को लेआउट करने में मदद करने के लिए किया जा सकता है। हर एकUIView डिफ़ॉल्ट रूप से मार्जिन के साथ आता है, लेकिन वे केवल तभी दृश्य प्लेसमेंट को प्रभावित करते हैं जब आप एक बाधा से संबंधित होते हैं जो एक मार्जिन से संबंधित होती है।

हाशिये का उपयोग कैसे करें

इंटरफ़ेस बिल्डर में मार्जिन का उपयोग करने का एकमात्र तरीका अपने बाधाओं को कॉन्फ़िगर करते समय रिलेटिव टू मार्जिन विकल्प की जांच करना है । यह है कि जब आप अपने दृष्टिकोण को किनारों के बजाय हाशिये का उपयोग करने के लिए निर्देशित करते हैं, तो मेरे विचार से।

यहां छवि विवरण दर्ज करें

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

  1. पहला आइटम (अनचेक), दूसरा आइटम (चेक): इस मामले में, हम यह घोषित कर रहे हैं कि सबव्यू के बाएं किनारे को सुपरवाइवे के बाएं मार्जिन (जैसा कि इस छवि में दिखाया गया है) में संरेखित होना चाहिए।

यहां छवि विवरण दर्ज करें

  1. पहला आइटम (अनचेक), दूसरा आइटम (अनचेक): दोनों बढ़त का उपयोग कर रहे हैं, मार्जिन का नहीं । इस स्थिति में, हम यह घोषित कर रहे हैं कि सबव्यू के बाएं किनारे को सुपरवाइवे के बाएं किनारे पर संरेखित किया जाना चाहिए।

यहां छवि विवरण दर्ज करें

  1. पहला आइटम (चेक), दूसरा आइटम (अनचेक): इस मामले में, हम यह घोषित कर रहे हैं कि सबव्यू के बाएं मार्जिन को पर्यवेक्षणीय के बाएं किनारे पर संरेखित करना चाहिए। इस तरह का लेआउट वास्तव में सबव्यू को सुपरवाइज को ओवरलैप करता है।

यहां छवि विवरण दर्ज करें

  1. पहला आइटम (चेक), दूसरा आइटम (चेक)। यह वास्तव में केस 2 के रूप में एक ही प्रभाव है, क्योंकि सबव्यू और सुपरवाइवे में एक ही डिफ़ॉल्ट मार्जिन है। हम घोषणा कर रहे हैं कि सबव्यू के बाएं मार्जिन को सुपरवाइवे के बाएं मार्जिन के साथ संरेखित करना चाहिए।

यहां छवि विवरण दर्ज करें

मार्जिन के बारे में क्या अच्छा है

यदि आप मार्जिन का उपयोग करने का निर्णय लेते हैं तो यह नई सुविधा (iOS8) केवल UI विकास को प्रभावित करती है।

मार्जिन का उपयोग करके आप एक ही संपत्ति के मूल्य को बदलकर एक साझा पर्यवेक्षण का एक सामान्य संबंध साझा करने वाले कई साक्षात्कारों के प्लेसमेंट को समायोजित कर सकते हैं। यह निश्चित मानों के साथ सभी संबंधित बाधाओं को सेट करने पर एक स्पष्ट जीत है, क्योंकि यदि आपको एक-एक करके प्रत्येक मूल्य को बदलने के बजाय सभी रिक्ति को अपडेट करने की आवश्यकता है, तो आप पर्यवेक्षक के मार्जिन को एक पंक्ति के साथ अपडेट करके सभी प्रासंगिक प्लेसमेंट को संशोधित कर सकते हैं। इस तरह कोड एक:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

इस लाभ को स्पष्ट करने के लिए, निम्नलिखित मामले में सभी साक्षात्कारों के बाएं किनारे को उनके पर्यवेक्षण के बाएं मार्जिन से जोड़ दिया जाता है। इस प्रकार, पर्यवेक्षक के बाएं मार्जिन को बदलने से एक ही समय में सभी साक्षात्कार प्रभावित होंगे।

यहां छवि विवरण दर्ज करें


विस्तृत विवरण के लिए धन्यवाद। मैं इसे एक स्वीकृत उत्तर के रूप में चिह्नित कर रहा हूं क्योंकि यह चीजों को अच्छी तरह से समझाता है।
भोमित मेहता

धन्यवाद @ भौम, उम्मीद है कि यह उत्तर मदद करता है।
स्कॉट झू

4
"मुझे समझ नहीं आ रहा है कि लोग शिकायत क्यों कर रहे हैं"। खैर, शायद व्यवहार में से एक आखिरी दांव के साथ बदल गया है, मैंने जांच नहीं की है। लेकिन कम से कम कुछ महीने पहले, यह एक दुर्घटना का कारण बना, भले ही आपने कोड में लेआउटमैरिज सेट करने का प्रयास नहीं किया हो।
केपीएम

यह इंगित करने के लिए लायक है कि नए अवरोधों को जोड़ते समय, एक्सकोड के नए संस्करण आपको "कांस्ट्रेन टू मार्जिन" के लिए एक बॉक्स को अनचेक करने की अनुमति देते हैं जो समान "रिलेटिव टू मार्जिन" ध्वज सेट करता है। यह उपयोगी है क्योंकि यह कुछ क्लिक बचाता है! ग्रेट उत्तर BTW, इतनी अच्छी तरह से समझाया गया था और चित्र बहुत मददगार थे।
एरिकवसकेन

मैंने नोट किया कि चित्र ड्रॉपबॉक्स पर होस्ट किए गए हैं। क्या SO पर छवियों को होस्ट करना बेहतर नहीं होगा?
परीक्षण

63

IOS 8 में अब आपके पास पर्यवेक्षक की सीमा के लिए पूर्वनिर्धारित मार्जिन के सापेक्ष अपने अवरोधों को परिभाषित करने का विकल्प है, बजाय पर्यवेक्षण के सीमा के। हाँ, यह पूरी तरह से लेआउट के मार्जिन से संबंधित है जिसे आपने डॉक्स में बताया है। एक फायदा यह है कि आप अपने मार्जिन को गतिशील रूप से, या हर तरह के डिवाइस के लिए अलग-अलग तरीके से परिभाषित कर सकते हैं, और बाधाओं को संशोधित किए बिना लेआउट को इसी तरह अपडेट किया जाएगा।

इसका उपयोग कब करें: जब आप इस नए लचीलेपन का लाभ उठाना चाहते हैं।

इसका उपयोग कब नहीं करना है: iOS 7 या उससे नीचे चलाने के लिए लक्षित किसी भी ऐप के लिए।


21
यह एक अच्छी सुविधा होगी यदि यह डिफ़ॉल्ट रूप से सक्षम नहीं था और अभी तक iOS 8 से पहले किसी भी चीज पर एक समान दुर्घटना का कारण बनता है
TylerJames

1
अधिक सहमत नहीं हो सका।
KPM

42

UIView पर संपत्ति है: layoutMarginsApple डॉक्स देखें । मूल रूप से अगर लेआउट मार्जिन 8,8,8,8 (डिफ़ॉल्ट) है, तो कंटेनर मार्जिन के लिए 0 अग्रणी स्थान के साथ एक बाधा 8. की x स्थिति होगी। ध्यान दें कि यह केवल iOS8 या बाद में उपलब्ध है।

उन सभी के लिए जो कंटेनर बाधाओं के लिए अपनी बाधाओं को नहीं चाहते हैं:

सीटीआर + क्लिक करें + बाधा निर्माण पॉपअप दिखाने के लिए खींचें।

यदि मेनू डिफॉल्ट रूप से हाशिया को हाशिये पर बनाने के लिए दिखाता है, तो कन्टेनरेन्ट को कंटेनर में रखने की अनुमति देने के लिए विकल्प / alt दबाए रखें, न कि कंटेनर मार्जिन।

अब यह हाशिया के लिए बाधा नहीं बनाने का विकल्प दिखाएगा। यह वह जगह है रास्ता तेजी से मेरी उपयोग में।


3
यह शायद सबसे अच्छा समाधान है जो मुझे वहां मिला है। "हाशिये पर कब्ज़" को अनियंत्रित करना हमेशा काम नहीं करता है और थोड़ा बहुत जादुई लगता है। यह पूर्ण है।
लेवी मैक्लम

पृथ्वी पर डिफ़ॉल्ट 10pt क्यों नहीं है?
ज़ैलांक

11
Apple के पास प्रयोज्यता अनुसंधान के आधार पर लंबाई और आकार चुनने का इतिहास है, न कि उन संख्याओं को चुनने से जिन्हें हम पढ़ते हैं कि कोड पसंद कर सकता है। कई चीजों के लिए एग डिफ़ॉल्ट ऊंचाई 44 या 35 पीटी है। @ZaBlanc
काइल रॉबसन

सही समाधान जब मैं डिफ़ॉल्ट रूप से मार्जिन के बिना स्टोरीबोर्ड पर बाधा जोड़ रहा हूं। धन्यवाद!
inix
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.