के सबव्यूव पर प्रोग्रामेटिक रूप से Autolayout मैंने एक कस्टम समूह बनाने के लिए UIView को उपclassed है दृश्य मैं अपने लेआउट में कुछ सरल चीजों को जोड़ने के लिए उपयोग करता हूं। इस समूह दृश्य में एक UILabel शामिल है जिसका उपयोग शीर्षक और UIView के रूप में किया जाता है जो पृष्ठभूमि रंग के साथ इसके कैलियर पर एक राउंडरेक्ट खींचता है। UITableView के अनुभागों को सोचें। मैं इस समूह को UIView छोड़कर और मेरी कक्षा को अपने सबक्लास में बदलकर स्टोरीबोर्ड पर जोड़ता हूं। सभी अच्छी तरह से काम करते हैं, मैंने एक्सकोड में उपयोगकर्ता परिभाषित रनटाइम विशेषताओं के माध्यम से शीर्षक सेट किया है। सभी महान काम करते हैं, मैं स्टोरीबोर्ड पर इस दृश्य में UILabels जोड़ता हूं और यह चलने पर शीर्षक लेबल बनाता है और सही बनाता है। मेरी groupView कीएक उपclassed UIView
संरचना:
- groupView: (UIView) clipToBounds: नहीं;
- शीर्षक: (UILabel) समूह दृश्य के ऊपर स्थान पर रखा गया।
- सामग्री दृश्य: (UIView) roundRect और कैलियर के माध्यम से रंग बनाता है, समूह दृश्य के समान आकार होना चाहिए।
तो समस्या क्या है? खैर, ऑटोलायआउट से निपटना एक दर्द है, लेकिन इस उपclassed UIView के लिए काम करने के लिए मुझे सामग्री सेट करने की आवश्यकता है प्रोग्राम देखें। मैं इस ऑटो लेआउट ASCII प्रारूप स्ट्रिंग के सिंटैक्स को नहीं समझ सकता। वर्तमान में मेरे पास है:
_contentView = [[UIView alloc]initWithFrame:self.bounds];
_contentView.layer.cornerRadius = 5.0f;
_contentView.layer.masksToBounds=YES;
_contentView.backgroundColor=_backgroundColor;
_contentView.layer.borderWidth=_borderWidth;
_contentView.layer.borderColor=_borderColor.CGColor;
[self insertSubview:_contentView atIndex:0];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self,_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[self]-0-[_contentView]-0-[self]" options:0 metrics:nil views:viewsDictionary];
for (NSLayoutConstraint *constraint in constraints) {
[_contentView addConstraint:constraint];
}
कौन सा के साथ दुर्घटनाओं: न आया हुआ अपवाद 'NSGenericException', कारण की वजह से * समाप्त एप्लिकेशन: 'असमर्थ दृश्य पर बाधा स्थापित करने के लिए। क्या बाधा दृश्य के उप-भाग के बाहर से कुछ संदर्भित करती है? यह अवैध है। बाधा: दृश्य:> '
मैं यह पहली कोशिश की और यह अभी भी काम नहीं किया:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[_contentView]-0-|" options:0 metrics:nil views:viewsDictionary];
कौन सा के साथ दुर्घटनाओं: * न आया हुआ अपवाद के कारण एप्लिकेशन समाप्त' NSGenericException ', कारण:' में असमर्थ देखने पर बाधा स्थापित करने के लिए। क्या बाधा दृश्य के उप-भाग के बाहर से कुछ संदर्भित करती है? यह अवैध है। बाधा: दृश्य:> '
शेख़ी: किसी भी तरह इस autolayout कैसे लाभ वजन भूमि के ऊपर अभी हमें काम को बचाने के लिए लगता है, लेकिन मैं नहीं दिख रहा। पृथ्वी पर क्यों वे संदर्भों और विधियों का उपयोग करने से आगे बढ़ते हैं या इस पुरातन प्रारूप स्ट्रिंग को भी टाइप करते हैं? यह करना कितना आसान होगा: [_contentView बाधा: NSLayoutFormatAlign देखने के लिए देख रहे हैं: स्वयं डिस्टेंस: 0.0f]; या कुछ समान है? मैं इस बिंदु पर स्प्रिंग्स और स्ट्रेट्स के साथ इतना सौदा करता हूं।
कोई भी मदद समझने, या सामग्री को बाधित करने के लिए मुझे सिंटैक्स दिखा रहा है स्वयं के आकार में देखें उपयोगी होगा।
अपने रान के बारे में: Autolayout में एक सीखने की वक्र है और आप इसे पहले से नफरत करते हैं - लेकिन एक बार जब आप पूरी तरह से फ्रेम के बजाय बाधाओं में सोचते हैं, तो यह आसान हो जाता है। और "दृश्य प्रारूप" बहुत बेकार है, जब तक कि आप केवल एक पंक्ति में चीजें बिछा रहे हों। दूसरी विधि (बाधा WithItem ...) मूल रूप से सिंटैक्स है जो आप ऊपर अपने रेंट में हैं। – jrturton
अगर किसी और को इस ASCII-Art प्रारूप स्ट्रिंग को समझने में समस्याएं आ रही हैं, तो मुझे यह ट्यूटोरियल उपयोगी पाया गया। मुझे पता है कि यह रूबी के लिए है लेकिन प्रारूप स्ट्रिंग उद्देश्य-सी में समान है। http://seanlilmateus.github.com – brucemartin