2012-06-18 14 views
6

के साथ शुरू की गई स्टोरीबोर्ड में स्क्रॉलव्यू बनाया गया मैंने स्टोरीबोर्ड में एक यूआईएसक्रॉल व्यू बनाया, इसे व्यू कंट्रोलर को एक संपत्ति के रूप में जोड़ा, और अब पेजिंग के साथ कुछ सबव्यूव जोड़ने की कोशिश कर रहा हूं। लेकिन, भले ही मैंने स्टोरीबोर्ड में आयामों को ग्राफिकल रूप से सेट किया है, फिर भी UIScrollView का फ्रेम 0,0,0,0 होने वाला है। क्या मुझे आयामों को हार्डकोड करने की आवश्यकता है, भले ही मैंने उन्हें पहले ही स्टोरीबोर्ड में ग्राफिकल रूप से निर्दिष्ट किया हो?फ्रेम 0,0,0,0

इसके अलावा, संबंधित स्क्रॉल दृश्य में उपयोग करने के लिए स्टोरीबोर्ड में सबव्यूज़ को कस्टमाइज़ करना संभव है? ऐसा लगता है कि मैं ऐसा दृश्य नहीं बना सकता जब तक कि यह पहले से ही नियंत्रक के भीतर न हो। चूंकि मेरे पास केवल एक नियंत्रक है और संभावित रूप से कई विचार हैं जो मैं ग्राफिक रूप से सेट अप करना चाहता हूं, मैं प्रोग्रामेटिक रूप से ऐसा किए बिना ऐसा कैसे करूं?

+0

आपने UIScrollView को कैसे आकर्षित किया? क्या आपने इसे अपने व्यू कंट्रोलर या फ्री फॉर्म पर खींचा था? –

+0

मैंने इसे स्टोरीबोर्ड से ऑब्जेक्ट के रूप में व्यू कंट्रोलर पर खींच लिया है। – user1096786

+0

आप इसे 0,0,0,0 कैसे जानते हैं? यह स्क्रॉलव्यू के समान आकार होना चाहिए जिसे आपने ViewController में खींचा था। –

उत्तर

16

स्टोरीबोर्ड के साथ viewDidLayoutSubviews वह जगह है जहां आप अपने सभी विचारों का आकार प्राप्त कर सकते हैं। viewWillAppear मेरे लिए काम नहीं किया और हमेशा लौटा (0,0,0,0);

+1

नोट भी एक चाल है कि आप वहां निहित सबव्यू के आकार को पकड़ सकते हैं और फिर फ्रेम/सीमाओं को जानने वाले उन सबव्यूव्यू के सबव्यू के लिए लेआउट कोड जोड़ सकते हैं। –

0

आप शायद उस लाइन पर ब्रेकपॉइंट सेट करें जहां दृश्य अभी तक सेटअप नहीं हुआ था। इस प्रयास करें:

- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     CGRect frame = self.scrollView.frame; 
     NSLog (@"FRAME IS %@", NSStringFromCGRect(frame)); 
    } 
    return self; 
} 
1

मुझे पता चला कि जब मैं viewWillAppear में scrollview का उपयोग, फ्रेम वास्तव में सही संख्या दे देंगे। मैंने पहले इसे awakeFromNib और viewDidLoad में आजमाया और 0,0,0,0 फ्रेम भी मिला।

स्टोरीबोर्ड से पहले अजीब बात क्या है, आप जागने में सही फ्रेम आयाम प्राप्त करने में सक्षम हैं। इसका एक उदाहरण ऐप्पल के नमूना कोड PageControl में से एक में है।

तो सवाल का जवाब देने के लिए संक्षेप में, इसे viewWillAppear से एक्सेस करने का प्रयास करें (मान लें कि आपने स्टोरीबोर्ड में UIScrollView बनाया है)।

+1

'awakeFromNib' चर्चा से: संग्रह से लोड की गई प्रत्येक ऑब्जेक्ट पर एक जागृत FromNib संदेश भेजा जाता है, लेकिन केवल अगर यह संदेश का जवाब दे सकता है, और केवल संग्रह में सभी ऑब्जेक्ट लोड होने और प्रारंभ करने के बाद ही। जब किसी ऑब्जेक्ट को जागृत FromNib संदेश प्राप्त होता है, तो इसकी सभी आउटलेट आवृत्ति चर सेट होने की गारंटी दी जाती है। और मैंने जो परीक्षण किया है उससे मुझे इस विधि में मेरे आउटलेट का शून्य संदर्भ मिलता है। तो शायद यह धारणा स्टोरीबोर्ड के साथ सच नहीं है और दस्तावेज़ीकरण को अद्यतन करने की आवश्यकता है। हालांकि मेरे पास पहले से ही मेरे आउटलेट का फ्रेम 'viewDidLoad' में सेट है। – florian

+0

क्षमा करें, मुझे बस UIScrollView को स्टोरीबोर्ड पर खींचने की कोशिश करने के लिए सही समस्या है और आकार निरीक्षक ने इसका आकार परिभाषित किया है। हालांकि, मैंने 'viewWillAppear' में एक ब्रेकपॉइंट सेट किया है (नहीं 'viewDidLoad' !!) और यह अभी भी बताता है कि फ्रेम {0,0,0,0} है। हालांकि मैं मैन्युअल रूप से इसे वापस सेट कर सकता हूं, फिर क्या होता है जब UIScrollView स्टोरीबोर्ड से लोड होता है? – Yeung

+0

अरे, मुझे पता चला कि मैं 'viewDidAppear' में सही फ्रेम मान तक पहुंच सकता हूं। मैं एक्सकोड 4.5 और आईफोन 6.0 सिम्युलेटर के लिए निर्माण कर रहा हूं। क्या इसका कोई कारण नहीं है? – Yeung

3
स्टोरीबोर्ड एक नियंत्रक की दुकानों viewDidLoad से पहले नहीं जुड़े हुए हैं और यह के आकार viewWillAppear जब तक सेट नहीं है के साथ

, यहाँ देखें:

http://cs193p.m2m.at/lecture-8/

जैसे ही नियंत्रक पूरी तरह से instantiated जाता है और इसके आउटलेट हुक अप व्यूडिडलोड: कहा जाता है। इस प्रकार सेटअप कोड डालने के लिए यह एक अच्छी जगह है। हालांकि नियंत्रक का आकार अभी तक सेट नहीं है, लेकिन व्यू विल्लएपियर: जिसे स्क्रीन पर दृश्य दिखाई देने से ठीक पहले कहा जाता है।

तो मुझे लगता है कि एनरिकोस सुझाव सही है। आकार-संबंधित सामान को viewWillAppear में डालने का प्रयास करें।

+0

viewDidLayoutSubviews। नीचे मेरी टिप्पणी देखें। –

0

यह काफी आसान है: अक्षम करें स्टोरीबोर्ड सेटिंग्स में Autolayout का उपयोग करें।

Disable Use Autolayout in the Storyboard settings (red rectangle)

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