2012-09-27 12 views
20

मैं ऑटो लेआउट के साथ नए आईओएस 6 एसडीके के साथ बहुत सरल तत्व बनाने की कोशिश कर रहा हूं। मेरे पास एक छवि दृश्य है और इसे स्क्रॉलव्यू में एम्बेड करें। (सब कुछ इंटरफ़ेस बिल्डर के साथ बनाएँ)। .png फ़ाइल सेट है और imageView मोड "शीर्ष बाएं" पर सेट है।आईओएस पर ऑटो लेआउट के साथ स्क्रॉलव्यू में छवियां देखें 6

कार्यान्वयन:

#import "ImaginariumViewController.h" 

@interface ImaginariumViewController() 
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 
@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@end 

@implementation ImaginariumViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.scrollView.contentSize = self.imageView.image.size; 
    self.imageView.frame = 
    CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height); 
} 

@end 

जब मैं अनुप्रयोग चलाने, छवि स्क्रॉल नहीं है। ऑटो लेआउट बंद कर दिया गया है (स्ट्रेट्स और स्प्रिंग्स के साथ), मेरे पास स्क्रॉलिंग काम कर रहा है। मुझे लगता है कि समस्या बाधाओं के साथ है। क्या कोई मेरी मदद कर सकता है, कृपया?

उत्तर

52

मुझे बस एक ट्यूटोरियल में एक ही समस्या का सामना करना पड़ा जिसे मैं अपडेट कर रहा था। मैंने प्रोग्राम्सेटिक रूप से बाधाओं को हटाने, शाप देने और दीवार के खिलाफ अपने सिर को टक्कर मारने का प्रयास किया - कोई किस्मत नहीं।

लगभग 5 मिनट पहले, हालांकि, मैंने कुछ ऐसा करने की कोशिश की जिसने मुझे सामना किया और एक और मुद्दा तय किया, और टा दा! UIScrollView फिर से काम कर रहा है! समाधान नहीं बल्कि viewDidLoad से, viewDidAppear के एक कार्यान्वयन में पुराने कोड है कि UIScrollView contentSize संपत्ति सेट ले जाने के लिए किया गया था:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    self.theScroller.contentSize=CGSizeMake(200.0,2000.0); 
} 

मुझे आशा है कि यह किसी और के सिर दर्द है कि ऑटो लेआउट के साथ दिखाई दिया में से कुछ का सामना मदद करता है।

+0

यह काम करता है, धन्यवाद! वास्तव में अजीब ऐप्पल ने आईओएस 6 दस्तावेज़ों में इस पर जानकारी नहीं दी है। शायद समस्या यह है कि बाधाओं को बाद में सेट किया गया है-viewDidLoad को कॉल किया जाता है (जैसा कि यह स्टोरीबोर्ड से आता है, इसे awakeFeomNib पर सेट किया जाना चाहिए, जिसे पहले देखा गया था, जैसा कि मुझे पता है)। – Vitaly

+2

हालांकि scrollView के अंदर imageView के ज़ूमिंग के साथ एक और समस्या है। – Vitaly

+0

मेरे भगवान जो बहुत परेशान था। इतना समय बर्बाद हो गया! जैसे ही इसे देखने के लिए स्थानांतरित किया गया था DidAppear viewDidLoad से यह ठीक काम किया। धन्यवाद जॉन! – Andy

27

Autolayout पहले बहुत भ्रमित हो सकता है। आप वास्तव में कहीं भी स्क्रॉलव्यू की सामग्री सेट नहीं करना चाहते हैं। एक शुद्ध ऑटोलायआउट दृष्टिकोण के साथ स्क्रॉलव्यू अपना स्वयं का सामग्री आकार सेट करता है। iOS 6 release notes में autolayout और UIScrollView पर अनुभाग देखें:

पुस्तक को देखने के subviews पर कमी एक आकार को भरने के लिए है, जो तब पुस्तक को देखने के सामग्री आकार के रूप में व्याख्या की है में परिणाम चाहिए। (यह intrinsicContentSize ऑटो लेआउट के लिए इस्तेमाल किया विधि के साथ भ्रमित नहीं किया जाना चाहिए।)

नोट मतलब है कि यह है कि scrollview की subviews पर कमी स्पष्ट चौड़ाई और ऊंचाई सेट करना होगा और चौड़ाई कि के आधार पर भिन्न का उपयोग नहीं स्क्रॉलव्यू के पहलुओं।

दूसरी त्रुटि यह है कि आप छवि के आकार में UIImageView का फ्रेम सेट करते हैं। ऑटोलायआउट के साथ यह भी अनावश्यक है। UIImageView वास्तव में intrinsicContentSize है जो अंतर्निहित छवि का आकार है। (इसे बदलने के लिए आप चौड़ाई और एक उच्च प्राथमिकता के साथ ऊंचाई के लिए बाधाओं को स्थापित करना चाहिए) इसका मतलब है कि ऑटो लेआउट के साथ एक scrollview में एक छवि जगह और यह सही कोड स्क्रॉल है निम्न होना चाहिए:

** nothing at all!!! ** 

लेकिन थेरेस अभी भी कुछ तुम बाहर देखने के लिए कि एक छवि स्क्रॉल करने के लिए नहीं दिखाई देता है और संकेत aforelinked रिलीज़ नोट में है कि करने के लिए आप का कारण बन सकता के लिए की जरूरत है:

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

यानी।यदि आप इंटरफ़ेस बिल्डर में बाधाएं सेट करते हैं और पदानुक्रम में स्क्रॉलव्यू के ऊपर एक दृश्य में छवि दृश्य को बाधित करते हैं तो यह प्रभावित होगा कि दृश्य स्क्रॉल कैसे दिखाई देता है। पागल!

हैप्पी कोडिंग ...

+0

धन्यवाद। उच्च प्राथमिकता चौड़ाई/ऊंचाई रखने के लिए छवि दृश्य को सेट करने के बारे में आपके नोट्स ने मुझे – bean

+0

मदद की है हे @ jackslash सोच रहा था कि क्या आप जानते हैं कि दृश्य और स्क्रॉल व्यू के पर्यवेक्षण (उदाहरण के रूप में) के बीच बाधा उत्पन्न कैसे करें। मैं थोड़ी देर के लिए कोशिश कर रहा हूं और यह नहीं देख सकता कि इसे कैसे किया जाए। – Ants

+0

@ एंट्स जो मुझे एक नए प्रश्न की तरह लगता है! यदि आप इसे एक लिंक बनाते हैं तो मैं इसे देखता हूं। – jackslash

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