2014-05-23 36 views
9

आईओएस पर 7. मेरे पास नेविगेशन नियंत्रक है और मैं स्टैक के शीर्ष पर एक नया वीसी दबाता हूं।_adjustContentOffsetIfNecessary - UIScrollView स्वचालित रूप से शीर्ष पर स्क्रॉल करता है

उस नए वीसी में एक यूआईएसक्रोल व्यू है जो वीसी के मूल दृश्य को भरता है और लंबवत स्क्रॉल करता है। यदि मैं थोड़ा सा स्क्रॉल करता हूं और फिर 'वापस जाने के लिए स्वाइप करें'/'पॉप पर स्वाइप करें' का उपयोग करने का प्रयास करता हूं, तो वर्टिकल स्क्रॉल व्यू पहले शीर्ष पर स्क्रॉल करता है, और फिर इंटरैक्टिवपॉपगेचर पहचाना जाता है और मैं शीर्ष VC को खींच सकता हूं बाएं और दाएं ढेर।

ऐसा क्यों होता है? मैं अपने स्क्रॉल व्यू को 'वापस जाने के लिए स्वाइप करें' संकेत से पहले शीर्ष पर स्क्रॉल करने से रोकना चाहता हूं। मैं यह कैसे कर सकता हूं?

अद्यतन # 1:

मैं जब मैं एक ताजा xcode प्रोजेक्ट बनाने के इस बग पुन: पेश नहीं कर पा रहे, तो यह सबसे निश्चित रूप से मूल परियोजना में अपनी ओर से त्रुटि है। जब मुझे कारण मिल जाए तो अपडेट हो जाएगा।

अद्यतन # 2:

जब interactivePopGesture मान्यता प्राप्त हो जाता है, setContentOffset विधि मेरी लंबवत स्क्रॉल दृश्य पर कहा जाता है। डीबगिंग करते समय, मुझे लगता है कि setContentOffset को UIScrollViewInternal _adjustContentOffsetIfNecessary से बुलाया गया था।

अद्यतन # 3:

एक ही समस्या एक इस परिदृश्य में क्या होता है: मैं एक ऊर्ध्वाधर UIScrollView अंदर UITextFields है। जब एक निश्चित UITextField दबाया जाता है, तो एक कीबोर्ड दिखाई देता है। जब मैं ड्रैग को छोड़ने के बाद कीबोर्ड को इंटरैक्टिव रूप से (कीबोर्ड पर स्क्रॉल व्यू पर खींचकर) को खारिज करना चाहता हूं, तो एक गड़बड़ होती है। UIScrollView की सामग्री ऑफसेट को क्षणिक रूप से शून्य पर सेट कर दिया गया है, और फिर मूल सामग्री ऑफ़सेट पर वापस सेट किया गया है और एनीमेशन के साथ आगे बढ़ेगा। contentOffset की यह अवांछित सेटिंग भी UIScrollViewInternal _adjustContentOffsetIfNecessary द्वारा आविष्कार की गई है।

मैं आगे बढ़ गया और UIScrollView के अपने उप-वर्ग के साथ दोनों परिदृश्यों में UIScrollView को प्रतिस्थापित कर दिया। उस सबक्लास में मैंने एक खाली विधि विधि के रूप में एक निजी विधि -(void) _adjustContentOffsetIfNecessary को ओवरराइड किया। मेरी दोनों समस्याओं को समाप्त कर दिया गया, और मुझे कोई नकारात्मक नतीजा नहीं मिला। यह कोई समाधान नहीं है और मैं इस दृष्टिकोण का उपयोग नहीं करूंगा, क्योंकि मुझे नहीं पता कि मैंने वास्तव में क्या किया है।

+0

UIViewController के सेट से संबंधित कुछ हो सकता है स्वचालित रूप से IOS7 –

+0

पर स्वचालित रूप से समायोजित करें IcjustjustScrollViewInsets = NO; प्रत्येक दृश्य नियंत्रक पर मैंने सोचा कि स्थिति के लिए प्रासंगिक हो सकता है। यह मदद नहीं करता है। – ancajic

+0

मैं इस समस्या से भी मुलाकात की। मैन्युअल रूप से कंटेंट ऑफसेट को सेट करें (0, -64), लेकिन _adjustContentOffsetIfNecessary ने इसे -108 में बदल दिया है। उलझन में। किसी भी अद्यतन? – Wingzero

उत्तर

0

मुझे ट्विटर पर इस बारे में interesting discussion मिला है। UITableViewController के बजाय एक UITableView साथ

Is there some trick to bring UINavigationController to not mess with a UIScrollView (_adjustContentOffsetIfNecessary)? 

@steipete Searching for the same thing and came across your tweet. I set contentOffset but it resets back to -64 (ios7). Did you find a fix? 
@errthling Add a dummy view as first subview. It won’t look further. 
@steipete Wow – that worked. I've been struggling with it for days. Thanks for that and everything else you put out there! :) 
@errthling happy to help! 

@steipete did you find an answer to this, 2 years ago? =D my scrollview's contentOffset is reset when I push a new viewcontroller.. 
@manuelmaly Yeah. Changed the view hierarchy so the scroll view is not the main view and not the first subview, and UIKit stops messing. 
@steipete oO i hacked it in the meantime by blocking setContentOffset before pushViewController is called. your solution seems cleaner tho 

twitter discussion

0

उपयोग UIViewController: हालांकि यह मेरे मामले नहीं है, यह किसी को मदद कर सकता है। यह मेरी समस्या हल हो गया :)

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