2017-08-28 47 views
6

आईओएस 11 बीटा 7 पर मेरे ऐप का परीक्षण करने के लिए UIKeyboardWillShowNotification समस्याएं - ऐसा लगता है जैसे कीबोर्ड मेरे UIViewController को सामग्री को धक्का नहीं देता है।आईओएस 11 बीटा 7

कोड इस (iOS7 के बाद से काम कर) की तरह दिखता है:

- (void)handleNotification:(NSNotification*)notification { 
if (notification.name == UIKeyboardWillShowNotification) { 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    nextButtonALBottomDistance.constant = keyboardSize.height + initialPhoneBottomDistance; 
    codeBottomViewALBottomDistance.constant = keyboardSize.height + initialCodeBottomDistance; 
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 
    [UIView animateWithDuration:animationDuration animations:^{ 
     [self.view layoutIfNeeded]; 
    }]; 
} 
else if (notification.name == UIKeyboardWillHideNotification) { 
    nextButtonALBottomDistance.constant = initialPhoneBottomDistance; 
    codeBottomViewALBottomDistance.constant = initialCodeBottomDistance; 
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 
    [UIView animateWithDuration:animationDuration animations:^{ 
     [self.view layoutIfNeeded]; 
    }]; 
} 

}

काफी दिलचस्प है - जब मैं घर बटन (एप्लिकेशन को न्यूनतम) और इसे फिर से खोलने (यह की हत्या के बिना) प्रेस - लेआउट तय किया गया है।

यह आईओएस 11 बीटा बग जैसा लगता है, लेकिन मुझे अब तक इसका कोई संदर्भ नहीं मिला।

किसी और को यह समस्या होने पर जानना अच्छा है।

+2

'UIKeyboardFrameBeginUserInfoKey' को 'UIKeyboardframeenduserinfokey' –

+0

के साथ बदलें, काम करने लगता है! बहुत बहुत धन्यवाद @ आदित्य श्रीवास्तव! – Gil

+0

आपकी मदद करने में खुशी हुई –

उत्तर

9

उपयोग UIKeyboardFrameEndUserInfoKey क्योंकि उस कुंजी एक CGRect कि स्क्रीन निर्देशांक में कीबोर्ड के अंत फ्रेम को दिखाता है जिसमें NSValue वस्तु के लिए है। UIKeyboardFrameBeginUserInfoKey का उपयोग न करें।

1

मैं इस गैर-आंदोलन मुद्दे में भी भाग गया। मुझे संदेह है कि शुरुआत & अंत फ्रेम हमेशा गलत था, जिसमें वे समान थे या लगभग समान थे, लेकिन हाल ही में आईओएस 11 में तय किया गया था और इस तरह के बहुत सारे कोड तोड़ दिए गए जो वास्तव में इन दो फ्रेमों के बीच अलग नहीं समझ पाए ।

जानकारी के आधार पर यहां https://stackoverflow.com/a/14326257/5282052

शुरू क्या कीबोर्ड से शुरू होता है की तरह लग रही है, जो सबसे नहीं चाहता होगा। अंत का परिणाम कीबोर्ड की तरह दिखने का परिणाम है, जो कि केवल सबसे अधिक चिंतित हैं।

[[[सूचना उपयोगकर्ता जानकारी] ऑब्जेक्टफोरकी: UIKeyboardFrameEndUserInfoKey] CGRectValue] .size;

वास्तव में स्क्रॉलव्यू के शून्य आंदोलन के साथ मेरी समस्या का समाधान करता है।

3

आप UIKeyboardFrameBeginUserInfoKey कीबोर्ड ऊंचाई प्राप्त करने के लिए कुंजी का उपयोग कर रहे हैं, तो सही कुंजीपटल ऊंचाई पाने के लिए UIKeyboardFrameEndUserInfoKey साथ बदलें।

आईओएस 11 में, UIKeyboardFrameBeginUserInfoKey कुंजी के लिए फ्रेम का ऊंचाई मान 0 है क्योंकि यह एक प्रारंभिक फ्रेम है। वास्तविक ऊंचाई प्राप्त करने के लिए हमें अंत फ्रेम की आवश्यकता है, और अंत फ्रेम UIKeyboardFrameEndUserInfoKey द्वारा वापस किया जाता है। एक CGRect कि शुरू फ्रेम स्क्रीन निर्देशांक में कीबोर्ड के पहचान करता युक्त एक NSValue वस्तु के लिए

UIKeyboardFrameBeginUserInfoKey कुंजी:

कीबोर्ड प्रबंध documentation देखें। ये निर्देशांक खाते में नहीं लेते हैं, किसी भी रोटेशन कारकों को को विंडो की सामग्री में लागू किया जाता है जिसके परिणामस्वरूप इंटरफ़ेस अभिविन्यास परिवर्तनों के परिणाम होते हैं। से पहले इसे प्रयोग (विधि: fromView convertRect का प्रयोग करके) निर्देशांक देखने पर या इस प्रकार, आप खिड़की निर्देशांक (विधि: fromWindow का उपयोग कर convertRect) को आयत बदलने की आवश्यकता हो सकती है।

UIKeyboardFrameEndUserInfoKey कुंजी एक CGRect कि अंत फ्रेम स्क्रीन निर्देशांक में कीबोर्ड के पहचान करता युक्त एक NSValue वस्तु के लिए। ये निर्देशांक खाते में नहीं लेते हैं, किसी भी रोटेशन कारकों को को विंडो की सामग्री में लागू किया जाता है जिसके परिणामस्वरूप इंटरफ़ेस अभिविन्यास परिवर्तनों के परिणाम होते हैं। से पहले इसे प्रयोग (विधि: fromView convertRect का प्रयोग करके) निर्देशांक देखने पर या इस प्रकार, आप खिड़की निर्देशांक (विधि: fromWindow का उपयोग कर convertRect) को आयत बदलने की आवश्यकता हो सकती है।

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