2011-04-14 1 views
5

मेरे पास एक UIScrollView है जिसमें लंबवत केवल स्क्रॉलिंग सक्षम है। मैं बटन का ग्रिड प्रदर्शित कर रहा हूं (फोटो व्यूअर छवि ग्रिड के समान)। स्क्रीन अभिविन्यास के आधार पर ग्रिड को अलग-अलग खींचा जाना चाहिए, ताकि सभी स्क्रीन रीयल एस्टेट का उपयोग किया जा सके। मेरे बटन के आकार को देखते हुए, मैं पोर्ट्रेट में 3 प्रति पंक्ति फिट और परिदृश्य में 4 प्रति पंक्ति फिट कर सकता हूं।अभिविन्यास परिवर्तन के दौरान SetContentSize के बाद शीर्ष पर स्क्रॉल करने के लिए UIScrollView ऑटो-स्क्रॉल - मैं इसे कैसे रोक सकता हूं?

मैं सभी बटनों को पुनर्स्थापित करता हूं: willRotateToInterfaceOrientation: अवधि और फिर कॉल करें: setContentSize: मेरे UIScrollView पर। सेटकंटेंट आकार पर कॉल के बाद होने वाली ऑटो-स्क्रॉलिंग के अपवाद के साथ सब कुछ ठीक काम करता है:। दूसरे शब्दों में, मान लीजिए कि मैं चित्र में था, और सूची के नीचे 3/4 स्क्रॉल किया गया, जब मैं परिदृश्य में घुमाता हूं, तो यह शीर्ष पर सभी बैक अप को स्क्रॉल करता है।

दिलचस्प बात यह है कि, एक ही परिदृश्य में, यदि मैं एक छोटा झटका स्क्रॉल ऊपर या नीचे करना चाहता था, और फिर डिवाइस को तुरंत घुमाता है, तो स्क्रॉल दृश्य सही ढंग से फिर से चलाता है, और वर्तमान स्क्रॉल स्थिति को बरकरार रखता है!

तो, स्पष्ट होने के लिए, यहां अपराधी सेटकंटेंट साइज लगता है: लेकिन स्पष्ट रूप से मुझे इसे स्क्रॉल दृश्य के लिए सही तरीके से स्क्रॉल करने के लिए कॉल करना होगा।

कोई भी विचार मैं वर्तमान स्क्रॉल स्थिति को कैसे बनाए रख सकता हूं?

धन्यवाद!

उत्तर

1

आप UIScrollViewDelegate विधि scrollViewShouldScrollToTop: को लागू करने का प्रयास कर सकते हैं, जो कॉलर को बताता है कि शीर्ष पर स्क्रॉल करना है या नहीं। आपको अपने प्रतिनिधि में कुछ झंडा होना पड़ सकता है जो इंगित करता है कि एक रोटेशन चल रहा है या नहीं, क्योंकि सामान्य परिस्थितियों में आप वास्तव में स्टेटस बार को टैप करने की क्षमता चाहते हैं और स्क्रॉल व्यू को शीर्ष पर स्क्रॉल कर सकते हैं।

यदि दूसरी तरफ, आप स्क्रॉल दृश्य को स्वचालित रूप से शीर्ष पर स्क्रॉल करना नहीं चाहते हैं, तो बस उस प्रतिनिधि विधि को कार्यान्वित करें और इसे वापस न करें।

+0

यह नहीं करता है 'है टी काम नहीं इसका उपयोग करने के समान प्रभाव है: scrollView.scrollsToTop = NO; जो, हां, स्टेटस बार टैप करते समय ऑटो-स्क्रॉल को शीर्ष पर रोकता है, हालांकि, मेरे मूल प्रश्न में वर्णित व्यवहार अभी भी जारी है ... – bpatrick100

+0

एक और विचार: 'setContentSize:' को कॉल करने से पहले, याद रखें कि कहां में सामग्री जो आप हैं, उसके बाद उस कॉल के बाद, 'setContentOffset:' पर ​​कॉल करें। यह मामला हो सकता है कि जब आप सामग्री आकार सेट करते हैं, तो सामग्री ऑफसेट उद्देश्य से रीसेट (0,0) पर रीसेट हो जाती है। हो सकता है कि आपने सामग्री आकार को उस चीज़ पर रीसेट कर दिया हो जो अब आकार को रीसेट करने से पहले सामग्री ऑफसेट था जो भी शामिल नहीं था। तो एसडीके शायद यह सुनिश्चित करके कुछ डिग्री तक उपयोगकर्ता अनुभव कर रहा है कि सामग्री आकार बदलने के बाद कुछ हमेशा दिखाया जाता है। –

0

मैं इस समस्या थी, सिर्फ इस किया था और यह मेरे लिए अच्छी तरह से काम करता है

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    //calculate percentage down scrollview currently at 
    float c = self.scrollView.contentOffset.y/self.scrollView.contentSize.height; 

    //reposition subviews in the scrollview 
    [self positionThumbnails:toInterfaceOrientation]; 

    //set the new scrollview offset to the same percentage, 
    // using the new scrollview height to calculate 
    self.scrollView.contentOffset = 
      CGPointMake(0, c * self.scrollView.contentSize.height); 
} 

मेरे मामले में, मैं उपकरण का आकार करने के लिए एक निश्चित चौड़ाई के साथ एक scrollview, और चर ऊंचाई

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

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