2015-01-27 8 views
6

यदि मैं xib में व्यू के सबव्यू के रूप में तालिका दृश्य का उपयोग करता हूं। और tableView पूरी तरह से दृश्य को कवर किया गया है। लेकिन xib के गुणक में, मैं केवल दो लंबवत बाधाओं को देख सकता हूं: पहली बाधा का उपयोग तालिका प्रथम आइटम के रूप में शीर्ष दृश्य, सुपरव्यू का दूसरा आइटम के रूप में शीर्ष है, लेकिन दूसरी बाधा में, यह दिखाता है कि पर्यवेक्षक का पहला आइटम था, और tableView नीचे दूसरा आइटम था। xib का उपयोग करने का निर्णय लेने का कारण क्या है जो पहले आइटम & दूसरी आइटम के रूप में उपयोग करता है।ऑटो लेआउट बाधा के पहले आइटम और दूसरी वस्तु को कैसे समझें?

उत्तर

14

सभी बाधाओं प्रपत्र की एक सूत्र व्यक्त: (। संबंध <= या >= भी हो सकता है)

firstItem.firstItemAttribute == secondItem.secondItemAttribute * multiplier + constant 

अक्सर, गुणक 1 है, इसलिए छोड़ कि:

firstItem.firstItemAttribute == secondItem.secondItemAttribute + constant 

पॉजिटिव स्थिरांक के संदर्भ में आमतौर पर सोचना सबसे आसान है। तो, कुछ ऐसा:

view.Top == superview.Top + 20 

समझ में आता है। दृश्य का शीर्ष पर्यवेक्षक के शीर्ष से 20 अंक नीचे है। (ऑटो लेआउट द्वारा उपयोग की जाने वाली समन्वय प्रणाली में, वाई बढ़ता है, इसलिए 20 अंक जोड़ना "नीचे" स्थिति देता है।)

आप आइटम को चारों ओर स्विच कर सकते हैं, लेकिन, यदि आप एक ही रिश्ते चाहते हैं, तो आपको इसकी आवश्यकता होगी निरंतर अस्वीकार करने के लिए:

superview.Top == view.Top + -20 

वह -20 इसे समझना कठिन बना सकता है। वैसे, एक्सकोड खुशी से दो वस्तुओं को स्वैप कर देगा और आपके लिए स्थिरता को अस्वीकार कर देगा। (यदि गुणक 1 नहीं थे, तो गणित थोड़ा अधिक जटिल हो जाता है, लेकिन यह अभी भी संभव है।)

यदि आप केवल वस्तुओं को स्वैप करना चाहते हैं लेकिन निरंतर अस्वीकार नहीं करते हैं, तो यह एक अलग रिश्ते को व्यक्त करेगा:

superview.Top == view.Top + 20 

इसका मतलब यह होगा कि पर्यवेक्षक का शीर्ष दृश्य के शीर्ष से नीचे होगा। या, बल्कि, दृश्य पर्यवेक्षण के शीर्ष के ऊपर स्थित होगा और यह शीर्ष पर फिसल जाएगा।

अब, दूसरे छोर पर बाधाओं को अक्सर दूसरे क्रम में वस्तुओं के साथ व्यक्त किया जाता है क्योंकि आप आमतौर पर रिश्ते को विपरीत मानना ​​चाहते हैं। यही है, आप दृश्य के शीर्ष को पर्यवेक्षक के शीर्ष से नीचे रखना चाहते हैं, लेकिन आप दृश्य के नीचे से ऊपर के दृश्य होना चाहते हैं। इसलिए, जब आप वस्तुओं को अन्य क्रम में व्यवस्थित करते हैं तो केवल स्थिर होता है:

superview.Bottom == view.Bottom + 20 
+0

ग्रेट स्पष्टीकरण, क्षैतिज स्पैसिंग के बारे में क्या? इसका -16 का डिफ़ॉल्ट मान है, 'view.leading = superview.leading मार्जिन - 16', प्रकृति प्रतीत नहीं होता है। – gabbler

+0

thx, मैंने सूत्र बनाया "firstItem.firstItemAttribute == secondItem.secondItemAttribute * गुणक + निरंतर" दूसरे आइटम के फ्रेम के आधार पर पहले आइटम के फ्रेम की गणना करने के लिए उपयोग किया जाता है। तो इस सूत्र के पास दूसरे इटैम के फ्रेम की गणना के साथ कुछ भी नहीं होगा, क्या मैं सही हूँ? – ximmyxiao

+0

@ गब्बलर: क्षैतिज कार्य समान रूप से लंबवत होते हैं: अग्रणी शीर्ष के समान होता है और पीछे की ओर समान होता है (क्योंकि समन्वय प्रणाली अग्रणी/शीर्ष से पीछे/नीचे तक बढ़ जाती है)। मैं आईओएस और मार्जिन सामान से परिचित नहीं हूँ। यदि दृश्य का अग्रणी किनारा पर्यवेक्षण के अग्रणी से ट्रेलिंग (आमतौर पर दाएं) की ओर होना चाहिए, तो यह आमतौर पर 'देखें। देखना == पर्यवेक्षण। पढ़ना + N'।हालांकि, यदि आप मार्जिन के सापेक्ष उसी स्थिति को व्यक्त करते हैं, तो यह 'देखें। पढ़ना = पर्यवेक्षण। मार्जिन + (एन-मार्जिन चौड़ाई) पढ़ना। यह हो सकता है कि '(एन - मार्जिन चौड़ाई)' नकारात्मक है। –

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