2013-09-28 7 views
9

जब कीबोर्ड छुपा था, स्क्रॉलव्यू वापस इसकी मूल सामग्री में वापस आना चाहिए, लेकिन यह आईओएस 7 में काम नहीं कर रहा है। स्क्रॉलव्यू की सामग्री सेट करना जब कीबोर्ड दिखाया गया था तब काम करना काम कर रहा है लेकिन जब कीबोर्ड छुपा था, स्क्रॉलव्यू की सामग्री इंसेट शून्य को इंसेट करने के लिए सेट नहीं हो सकती है। कोड:आईओएस 7 UIScrollView सामग्री काम नहीं कर रहा

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:Nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardDidHideNotification object:nil]; 
} 

- (void)keyboardWasShown:(NSNotification *)notif 
{ 
    CGSize keyboardSize = [[[notif userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0); 


    UIScrollView *scrollView = (UIScrollView *)self.view; 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 

    CGRect rect = self.view.frame; 
    rect.size.height -= keyboardSize.height; 
    if (!CGRectContainsPoint(rect, self.wishContentField.frame.origin)) { 
     CGPoint point = CGPointMake(0, self.wishContentField.frame.origin.y - keyboardSize.height); 
     [scrollView setContentOffset:point animated:YES]; 
    } 

} 
- (void)keyboardWasHidden:(NSNotification *)notif 
{ 
    UIEdgeInsets zeroInsets = UIEdgeInsetsZero; 
    UIScrollView *scrollView = (UIScrollView *)self.view; 
    [scrollView setContentInset:zeroInsets]; 
    scrollView.scrollIndicatorInsets = zeroInsets; 
} 
+2

आप यह कैसे काम नहीं कर रहा व्याख्या कर सकते हैं (यह कैसे कुंजीपटल छुपा के बाद काम करता है)? ध्यान दें कि आईओएस 7 पर, यदि आपके पास पारदर्शी 'नेविगेशनबार' है, तो आपका व्यू कंट्रोलर आपके स्क्रॉल में एक शीर्ष इन्सेट सेट करेगा यदि अन्यथा सेट नहीं किया गया है। यह यहां मामला हो सकता है, क्योंकि आप 'contentInset.top = 0' सेट कर रहे हैं, इसलिए यह 'नेविगेशनबार' या 'स्टेटसबार' के पीछे कुछ सामग्री छिपा सकता है। –

+0

आपके उत्तर के लिए धन्यवाद। मैंने शीर्ष पर नेविगेशन Bar.frame.size.height पर सेट किया है, और यह अब काम कर रहा है। –

+1

एक उत्तर लिखें और एलेक्स- मुझे कुछ क्रेडिट दें;) –

उत्तर

9

प्रयास करें यह एक:

self.automaticallyAdjustsScrollViewInsets = NO;

यह मेरे लिए काम कर रहा है ...

0

तो, सिर्फ इसलिए कि मैं अभी भी इस सवाल का जवाब उपयोगी पाया, यहाँ क्या है मैंने किया। मैंने @ एलेक्स-आई और @ योंग-हो द्वारा टिप्पणी की सलाह ली। लेकिन किसी कारण से नेविगेशन बार की ऊंचाई काफी पर्याप्त नहीं थी।

UIEdgeInsets contentInsets = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height + 20.0f, 0.0, 0.0, 0.0); 
scrollView.contentInset = contentInsets; 
scrollView.scrollIndicatorInsets = contentInsets; 

जैसा कि मैंने कहा, मुझे उस 20.0f को जोड़ना था या मेरी सामग्री अभी भी काट दी गई थी। यकीन नहीं है कि क्यों। अगर मैं इसे समझता हूं तो मैं अपना जवाब अपडेट करूंगा।

+0

मैंने इस समस्या का भी अनुभव किया है, मुझे सामग्री इन्सनेट्स के बारे में 9 0 जोड़ना होगा, स्क्रॉल इंडिकेटरइन्सेट ठीक काम करता है। क्या आप ऑटोोज़ाइजिंग का उपयोग करते हैं? – streem

+0

इस तरह की जादू संख्याओं का कभी भी उपयोग न करें ('20.0f')। स्टेटस बार ऊंचाई सीधे प्राप्त करें। आईफोन एक्स के लिए स्टेटस बार ऊंचाई बदल दी गई है, उदाहरण के लिए, या फोन कॉल के दौरान '40.0f' के दौरान पिछले डिवाइस पर परिवर्तन – Dermot

1

यह contentSize जब VC के में सेट को छोड़कर काम नहीं कर रहा

- (void)viewDidLayoutSubviews 
{ 
    self.scrollView.contentSize = whatever 
} 

कह आप गलत दीवार के खिलाफ अपने सिर स्मैश हो सकता है से संबंधित हो सकती

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