2013-01-07 11 views
32

मुझे translatesAutoresizingMaskIntoConstraintsNO पर सेट करने की आवश्यकता है। डिफ़ॉल्ट रूप से यह YES पर सेट किया जाता है (स्ट्रिंग्स और स्प्रिंग्स से नए ऑटो लेआउट में संक्रमण करने वाले अधिकांश ऐप्स की सहायता के लिए)।अनुवाद सेट करने के लिए एक्सकोडिंग मास्कइंटो कॉन्स्ट्रेनेंट्स एक्सकोड 4.5

क्या एक्सकोड में कहीं है जहां डिफ़ॉल्ट को YES से NO में बदला जा सकता है?

या क्या मुझे इसे हर दृश्य के लिए मैन्युअल रूप से सेट करना है?

उत्तर

17

यह एक अच्छा सवाल है - और एक मैंने खुद को जवाब खोजने का प्रयास किया है। अफसोस की बात है, ऐसा लगता है कि कोई "त्वरित समाधान" नहीं है। वर्तमान में, एप्पल समझता है बाधा आधारित लेआउट ऑप्ट में - यहां तक ​​कि UIView Class Reference का एक वर्ग नामकरण:

में शामिल होने से करने के लिए बाधा आधारित लेआउट

लेकिन उस ऑप्ट में वैश्विक नहीं है। मुझे लगता है कि ऐसा इसलिए है क्योंकि अगर आप बस स्प्रिंग्स & स्ट्रैट्स में बाधाओं को बदलते हैं तो सब कुछ अच्छा नहीं लगता है। कुछ यूआई तत्व तोड़ते हैं, या आपको असंतोषजनक बाधाओं की एक टन मिल जाएगी।

मैं एक संभव समाधान के बारे में सोच सकते हैं - मैं इसे अपने आप प्रयास नहीं किया है, लेकिन आप सेट कि सभीUIView वस्तुओं - (BOOL)translatesAutoresizingMaskIntoConstraints के लिए NO वापस जाने के लिए UIView पर एक वर्ग बना सकता है। जबकि मुझे नहीं पता कि यह क्या टूट जाएगा, यह वैश्विक स्तर पर translatesAutoresizingMaskIntoConstraints को NO पर सेट करेगा।

यहां a good introduction to Categories if you want to learn more about them है!

+0

कैसे आप कोई वापस जाने के लिए सभी UIView वस्तु स्थापित करने के लिए एक वर्ग प्रयोग करते हैं? श्रेणी विधि केवल एक उदाहरण पर लागू होती है। – Boon

+2

यह उत्तर स्वीकार कर लिया गया है, लेकिन यह काम किया है?मैं इस दृष्टिकोण को समस्याग्रस्त होने की उम्मीद करूंगा। –

+0

श्रेणी विधि मूल विधि clobbers, @Boon, और प्रत्येक उदाहरण नए कार्यान्वयन का उपयोग करता है। [जब तक मूल विधि को किसी श्रेणी में लागू नहीं किया गया था] (http://stackoverflow.com/a/7013922/603977)। –

3

जब आपको अपने सबव्यू के आकार या स्थिति को बदलना होगा। अपने सबव्यूव के फ्रेम को सेट करने से पहले (BOOL)translatesAutoresizingMaskIntoConstraints विधि का उपयोग करें।

[self.benchmarkButton removeFromSuperview]; 
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES]; 
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.origin.y+40, 260, 30)]; 
[self.benchmarksView addSubview:self.benchmarkButton]; 

यही तरीका है अपने subview की कमी से झगड़ा ना करें, क्योंकि यह डिफ़ॉल्ट (autolayout) Xcode में है 4.3 या उच्चतर। धन्यवाद

+0

अच्छा, लेकिन मुझे लगता है कि मौजूदा बाधाओं के साथ काम करने के बारे में सोचने के बजाय आप इस तरह से संघर्ष कर सकते हैं। –

17

मुझे इस सवाल का अंत हो गया है, लेकिन उल्लिखित विकल्प अभी भी एक्सकोड 5 & 6 में गायब है, इसलिए सवाल अभी भी सार्थक है।

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

और यह अनुवादों के लिए भी काम करता हैऑटोरोसिंगमास्कइंटो कॉन्स्ट्रेन। तो सवाल हल किया जा सकता है।

enter image description here

+0

यह एक चिकना समाधान है, लेकिन मेरा मानना ​​है कि यह एक्सकोड 6.3 बीटा 2 में "फ्रीज" पैदा कर रहा था। जब मैंने इसे हटा दिया, तो मेरा दृश्य ठीक से लोड हो गया .. लेकिन इसके साथ, यह बीटा में अपग्रेड करने के बाद क्रैश हो रहा था। –

+2

एक्सकोड 9 और आईओएस 11 में किसी भी ऐसे व्यक्ति के लिए सही तरीके से काम करता है जो एक अद्यतन समाधान की तलाश में है। यह अब स्वीकार्य उत्तर होना चाहिए। – JasonD

3

प्रलेखन के अनुसार, इस संपत्ति स्वतः NO के लिए अगर दृश्य इंटरफ़ेस बिल्डर के माध्यम से जोड़ा जाता है निर्धारित है।

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/translatesAutoresizingMaskIntoConstraints

+1

अच्छी जगह। ध्यान दें कि UICollectionViewCell सामग्री दृश्य इस के लिए अपवाद हैं। –

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