2009-11-17 7 views
17

के साथ जोड़े जाने पर अपने माता-पिता को आकार बदलने का दृश्य बनाना मुझे addSubview का उपयोग करते समय समस्या हो रही है।addSubview

उदाहरण कोड:

ParentView *myParentView = [[ParentView alloc] initWithNibName:@"ParentView " bundle:nil]; 
ChildeView *myChildeView = [[ChildeView alloc] initWithNibName:@"ChildeView" bundle:nil]; 

//... parent frame resized with setFrame lets say to x:0, y:0, W:320, H:411 

[[myParentView view] addSubview: [myChildeView view]]; 

मेरे बच्चे जब जोड़ा बड़ा तो अभिभावक होता है और माता-पिता सीमा के लिए अपने फ़्रेम का आकार बदलने नहीं है। मैं अभिभावक पर "क्लिप सबव्यू" का उपयोग नहीं कर सकता, और "ऑटोरेज़िज़ सबव्यूज" काम नहीं करता है अगर पैरेंट फ्रेम का आकार फिर से बदल नहीं जाता है। क्या ऐसी कोई संपत्ति है जो प्रत्येक बच्चे पर सेटफ्रेम का उपयोग किये बिना अपने माता-पिता की सीमाओं पर स्वचालित रूप से आकार बदलती है?

उत्तर

30

यदि आप ऑटो लेआउट का उपयोग नहीं कर रहे हैं, तो क्या आपने बच्चे के दृश्य के ऑटोरेसाइज़ मास्क को सेट करने का प्रयास किया है? इस प्रयास करें:

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight); 

इसके अलावा, आप स्वचालित रूप से जब इसकी फ्रेम परिवर्तन अपने subviews आकार बदलने के लिए माता-पिता दृश्य प्राप्त करने के

myParentView.autoresizesSubviews = YES; 

कॉल करने के लिए आवश्यकता हो सकती है।

यदि आप अभी भी मूल दृश्य के फ्रेम के बाहर बच्चे को देखने के चित्र को देख रहे हैं, तो एक अच्छा मौका है कि मूल दृश्य इसकी सामग्री को क्लिप नहीं कर रहा है। कि ठीक करने के लिए, फोन

myParentView.clipsToBounds = YES; 
+0

जवाब के लिए धन्यवाद कॉपी चाहिए, हालांकि यह काम नहीं करता। लेकिन यह डिफ़ॉल्ट UIView व्यवहार क्यों नहीं है। क्या मैं मजाकिया कोड उत्पन्न कर रहा हूं? और क्यों दूसरी तरफ क्लिप सबव्यूज काम करता है? – Luca

+0

क्या आप बच्चे के दृश्य को जोड़ने से पहले मूल दृश्य के फ्रेम को बदल रहे हैं? –

+0

हां, हमेशा एक ही समस्या हो रही है। – Luca

0

आप इसे अपने UIViews में हमेशा से ऐसा कर सकते हैं - (void)didMoveToSuperview विधि। जब आपके माता-पिता से जोड़ा या निकाल दिया जाता है तो इसे कॉल किया जाएगा (हटाए जाने पर शून्य)। उस बिंदु पर बस अपना आकार अपने माता-पिता के लिए सेट करें। उस बिंदु से ऑटोरेसाइज मास्क पर ठीक से काम करना चाहिए।

+0

रिसीवर को सूचित करता है कि इसका पर्यवेक्षण बदल गया है (संभवतः शून्य तक)। ऐसा लगता है कि यह addSubview पर आग नहीं है। – Luca

7

बस मूल दृश्य दृश्य को बच्चे के दृश्य में कॉपी करें और फिर इसे जोड़ें। उसके बाद ऑटोरेसाइजिंग काम करेगी। वास्तव में आप केवल आकार CGRectMake (0, 0, parentView.frame.size.width, parentView.frame.size.height)

childView.frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height); 
[parentView addSubview:childView]; 
+0

लेकिन यह एक ऑटोरेसाइज नहीं है, यह सिर्फ माता-पिता दृश्य – lojals

+0

से क्लोन मेसर्स है इसलिए मैंने जोड़ा "उस ऑटोरेसाइजिंग के बाद काम करेगा।" आप इसे एक्सकोड के इंटरफेस बिल्डर में सेट कर सकते हैं, या जैसा कि यहां अन्य उत्तरों में बताया गया है। यदि सबव्यूव के माता-पिता के भीतर एक अजीब ज्यामिति है, तो ऑटोरेसाइजिंग अजीब परिणाम देगा। – cat