स्वचालित रूप से प्रोग्राम बनाम इंटरफ़ेस बिल्डर / xib / nib ऑटोसाइजिंग मास्क


216

मैं एक (शायद गलत) धारणा है कि xib में सही मार्जिन सूचक सक्षम करने के उपयोग के बराबर है में किया गया था UIViewAutoresizingFlexibleLeftMarginअंदर कोड और इतने पर।

इसलिए, मैं इस स्नैपशॉट के अनुसार सोचता था: यहां छवि विवरण दर्ज करें

बाद में आज मुझे चेक को पार करना पड़ा, और इस धागे पर ठोकर लगी ।

और इस ऐप्पल डॉक्यूमेंट में, शीर्षक के साथ अनुभाग के साथ शीर्षक - "हैंडलिंग लेआउट परिवर्तन स्वचालित रूप से ऑटोराइजिंग नियमों का उपयोग करते हुए" इस लिंक में: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptor/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

इसलिए अब मेरे दिमाग में एक नया कॉन्सेप्ट आया है कि कैसे ऑटोरेक्टिंग मास्क को प्रोग्रामेटिक रूप से सेट करना xib सेटिंग्स के बराबर होगा:

परिदृश्य 1 : केवल सेटिंग (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)इसके बराबर है:

(UIViewAutoresizingFlexibleWidth। UIViewAutoresizingFlexibleHeight)

XIB में?

परिदृश्य 2 : (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)कोड में सेटिंग इसके बराबर है:

।

XIB में?

क्या मेरे 2 नवीनीकृत परिदृश्य सही हैं? क्या मैं अभी अपनी समझ में हूँ?


3
आप मेरे साथ मजाक कर रहे है? पर लगता है कि मेरी उलझन भी कहाँ है। इसलिए अगर मैं गले लगाना चाहता हूं तो मैं नीचे की तरफ घूमता हूं। अच्छा काम सेब। यह अब तक का सबसे मुहावरेदार सेटअप है।
user4951

1
यदि आप शीर्ष गले लगाना चाहते हैं तो आपको यह सुनिश्चित करना होगा कि आप बिट मास्क कोड में UIViewAutoresizingFlexibleTopMargin का उल्लेख नहीं करेंगे। मेरी पहले की धारणा गलत थी और इसीलिए मैंने इस प्रश्न को बाहर निकालने के लिए पोस्ट किया था।
राज पवन गुमडाल

आपकी धारणा सही है। आप कहाँ गलत हैं
user4951

हां, आपके द्वारा उद्धृत दो परिदृश्य सही हैं।

3
मैंने इसके लिए एक सरल उपकरण बनाया: erkanyildiz.me/lab/autoresizingmask आप इसका उपयोग कर सकते हैं।
erkanyildiz

जवाबों:


35

हां, इंटरफ़ेस बिल्डर ने इसे एक अर्थ में "उलट" दिया है (या यूएवीवाईवाई पर निर्भर करता है कि आप इसे कैसे देखते हैं)। आपके उद्धृत "परिदृश्य" सही हैं।


47

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

UIViewAutoresizingFlexibleMarginsहर दिशा में UIView के मार्जिन को लचीला बनाते हुए आप एक प्रीप्रोसेसर मैक्रो का उपयोग करना पसंद कर सकते हैं । मैंने इसे पहले से तैयार हेडर फ़ाइल में रखा था ताकि यह हर जगह शामिल हो जाए।

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

UIViewAutoresizingFlexibleMarginsयूआई एलीमेंट को केन्द्रित रहने के कारण इसका उपयोग किया जाएगा क्योंकि यह किसी एक तरफ नहीं जाएगा। तत्व को अपने माता-पिता के साथ विकसित / छोटा करने के लिए, क्रमशः UIViewAutoresizingFlexibleWidthऔर सेट करें UIViewAutoresizingFlexibleHeight

मुझे इसका उपयोग करना पसंद है UIViewAutoresizingFlexibleMarginsक्योंकि मैं बाद में इसका संदर्भ ले सकता हूं जैसे:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

के बजाय

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

सभी अक्सर मैं ऊपर के उदाहरण की तरह एक पंक्ति में एक साथ इन मार्जिन को देखता हूं। सिर्फ पढ़ना मुश्किल है।


4
हर दिशा में लचीला होना चाहिए (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) मुझे लगता है? या मैं फिर से उलझन में हूँ!
राज पवन गुमडाल

4
FlexibleMargins तत्व को केंद्रित बनाए रखेगा (बाएं, ऊपर, दाएं, या नीचे मार्जिन को गले न लगाए)। लचीली चौड़ाई / ऊँचाई क्रमशः ui तत्व को बढ़ने / सिकोड़ने का काम करेगी।
सैम

4
क्या अब सब कुछ स्पष्ट है? इसके अलावा, मैं वास्तव में इसका मतलब था जब मैंने कहा कि मैंने आपके पोस्ट की सराहना की है। मैंने वास्तव में इसका समर्थन किया b / c इसने मुझे अतीत में भ्रमित किया है। मुझे लगता है कि यह एक बहुत अच्छा प्रश्न है
सैम

3
हां, धन्यवाद, अब मैं इसे प्राप्त करता हूं, "लचीले मार्जिन" और "लचीले चौड़ाई / ऊंचाई"। यह सब समझाता है, और आपका "बाएं, ऊपर, दाएं, या नीचे के मार्जिन को गले नहीं लगाना" समझाने का एक अच्छा तरीका है :)
राज पवन गुमडाल

0

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

बॉक्स के अंदर ऊर्ध्वाधर / क्षैतिज तीर (वसंत कहा जाता है) को सक्षम करने से ऊंचाई / चौड़ाई लचीली हो जाएगी। लेकिन एक बाहरी रेखा (जिसे अकड़ कहा जाता है) को सक्षम करने से वह पक्ष अनम्य / गैर-लचीला हो जाएगा।

बाहरी बाईं रेखा (बाएं अकड़) को सक्षम करना सक्षम करने के बराबर नहीं है UIViewAutoresizingFlexibleRightMargin। इसके बजाय, UIViewAutoresizingFlexibleRightMargin= पर सही अकड़ अक्षम हैं, बंद करता है, तो सही अकड़ सक्षम होना चाहिए।

यह पहली बार में काफी भ्रामक है, लेकिन अगर आप करीब से देखें, तो स्प्रिंग्स और स्ट्रट्स में अंतर है। मुझे नहीं पता कि Apple ने ऐसा क्यों किया, लेकिन मेरे लिए, कुछ ऐसे मामले थे जहां इसका इस्तेमाल करना आसान था। और कोड में विपरीत गुणों का उपयोग करना और भी अधिक भ्रामक है।


0

स्विफ्ट 4 इस का उपयोग करें

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

उद्देश्य सी

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.