ios - UIScrollView Frame Always CGRectZero -
मेरे पास एक निब है जिसमें मानक UIView
है और मैंने भी UIScrollView
एक IBOutlet
के रूप में (हाँ, इसे झुका हुआ है), मुख्य UIView
के उपदृश्य के रूप में नहीं, बल्कि अपने स्वयं के बाहर ही है Autolayout बंद है स्क्रॉल व्यू में कई सबव्यूज़ हैं और मुख्य दृश्य से बड़ा है। viewWillAppear:
में, मैं अपने मौजूदा फ्रेम आकार के UIScrollView
के कंटेट साइज़ को सेट करता हूं, और उसके फ्रेम को मुख्य दृश्य के आकार में सेट कर देता हूं, और इसे एक के रूप में जोड़ें मुख्य दृश्य का सबव्यू।
दुर्भाग्य से, कुछ भी नहीं दिख रहा है जब मैं NSLog
मेरे UIScrollView
के फ्रेम के रूप में {0, 0, 0, 0}
( CGRectZero < / code>)। मैंने सोचा था कि यह अजीब है, इसलिए मैं वापस आ गया और फ्रेम में प्रवेश करने की कोशिश की, इससे पहले कि मैंने इसमें कोई बदलाव किया। फिर भी शून्य मेरे किसी भी तत्व को देखने के लिए कुछ भी करने से पहले इसे
viewDidLoad
में लॉग आउट किया जाता है फिर भी शून्य (मेरे निब में एफडब्ल्यूआईड, फ्रेम है {0, 0, 320, 896}
)
मुझे अपने कई नियंत्रकों के साथ यह मुद्दा मिला है, लेकिन ऐसा लगता है मारो या छोड़ दो। कभी-कभी यह काम करता है, दूसरी बार मुझे खाली फ्रेम मिलती है सामान्यतया, सब कुछ से शुरू करने से समस्या ठीक हो रही है, लेकिन मुझे नहीं पता कि क्यों, जैसा कि मैंने एक ही समय में सब कुछ सेट कर रहा हूं।
Xcode संस्करण 6.1 (6A1052d) चल रहा है, आईओएस एसडीके 8.1
एक तैनाती के लक्ष्य के साथ मुझे बताएं कि अगर कोई अन्य प्रासंगिक जानकारी है जो मैं मदद कर सकता हूं।
संपादित करें 1: मेरे < कोड> UIScrollView एक "सबव्यू" होने के नाते, यह है कि मेरा दृष्टिकोण पदानुक्रम दस्तावेज़ रूपरेखा की तरह दिखता है:
जैसा कि आप देख सकते हैं, UIScrollView
दृश्य नियंत्रक का "सबव्यूव्यू" है, लेकिन "मुख्य" UIView जिसमें नियंत्रक का
दृश्य
आउटलेट है।
संपादित करें 2: अधिक चित्र और कुछ कोड। मेरे निब की स्थापना के बारे में यह एक बेहतर नतीजा है:
मैं अपने scrollView
को मुख्य UIView
में निम्नानुसार जोड़ता हूं:
- (शून्य) दृश्यविलएपीपर: (BOOL) एनिमेटेड {[सुपर व्यूव्वलएपियर : एनिमेटेड]; ScrollView.contentSize = scrollView.frame.size; ScrollView सेटफ़्रेम: CGRectMake (0, 100, self.view.frame.size.width, self.view.frame.size.height - 100); // मैं इसे थोड़ा संशोधित कर रहा हूं क्योंकि इसमें अन्य चर हैं जो कि अपनी वाई स्थिति और ऊँचाई निर्धारित करते हैं [आत्म। दृश्य addSubview: scrollView]}
लेकिन मैं अभी भी कोई नहीं सोचता उस कोड के मामलों - जो भी कारण हो, मेरा UIScrollView
वापस आ रहा है शून्य
। अगर मेरे पास मेरे निब में देखा गया दृश्य है, तो आउटलेट ठीक से जुड़ा हुआ है, फिर भी दृश्य कैसे होगा? मैं अपने नियंत्रक को initWithNibName
के माध्यम से प्रोजेक्ट सफाई करने का प्रयास किया है, और ऐप हटा रहा हूं और पुनः इंस्टॉल कर रहा हूं।
एक उत्तर पर सबसे अच्छा अनुमान है, और कुछ टिप्पणियां:
- Nibs को ऑब्जेक्ट पेड़ों को केवल क्रमबद्ध किया जाता है आप के रूप में कई दृश्य के रूप में आप रूट के रूप में चाहते हो सकता है। समस्या (बड़ी है!) यह है कि यदि वे आउटलेट्स को "कनेक्टेड" नहीं हैं जो कि
को बनाए रखता है
, कुछ बिंदु पर आप उन संदर्भ को खो देंगे।
चूंकि आपका UIScrollView
निब पर मुख्य दृश्य नियंत्रक दृश्य का एक सबव्यूव नहीं है, इसे इसके द्वारा नहीं रखा गया है (विचार उनके उप-दृश्यों को बनाए रखता है) इसलिए, यह आपके पर निर्भर है कि आप इसे अपने दृश्य नियंत्रक पर रख सकते हैं।
मेरा अनुमान है कि इस बिंदु पर आप दृश्य नियंत्रक में फ्रेम सेट करने का प्रयास कर रहे हैं, तो स्क्रॉल व्यू पहले ही चला गया है। मुझे यकीन नहीं है कि यह निश्चित है कि आप कब यह कर रहे हैं, लेकिन यह कुछ रन लूप के बाद हो सकता है, इसलिए अनुपस्थित स्क्रॉल दृश्य को डिलोक किया गया है।
कार्यवाही:
- इसके बजाय
IBOutlet
के लिए एक चर के, एक मजबूत प्रॉपर्टी (@property (मजबूत, nonatomic) IBOutlet UIScrollView * scrollView
) का उपयोग करें। -
__ मजबूत
योग्यता के लिए -
UIScrollView
को एक सबव्यू के भीतर जोड़ें, इसलिए जब ऑब्जेक्ट ट्री deserialized है पहले से ही उसके अभिभावक द्वारा रखे गए हैं।
यह देखते हुए कि आप मुख्य रूप से UIScrollView
को मुख्य दृश्य पदानुक्रम के बाहर डालते हैं, मैं मान रहा हूँ कि आप विकल्प नहीं चाहते 3, इसलिए मैं सिर्फ 1 के साथ जाऊंगा।
Comments
Post a Comment