iOS 11 - कीबोर्ड ऊँचाई कीबोर्ड अधिसूचना में 0 वापस आ रहा है


84

मैं बिना किसी समस्या के कीबोर्ड सूचनाओं का उपयोग कर रहा हूं और कीबोर्ड की सटीक ऊंचाई प्राप्त कर रहा हूं।

- (void)keyboardDidShow:(NSNotification *) notification{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    NSLog(@"%f",keyboardSize.height);}

लेकिन iOS 11 के साथ कीबोर्ड का आकार 0 है जब अधिसूचना को कॉल किया जाता है।

इस परिदृश्य में क्या समस्या आ रही है? मैं xcode 9 बीटा 5 का उपयोग कर रहा हूं

जवाबों:


190

इसे इस्तेमाल करो:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

स्विफ्ट के लिए, आप उपयोग कर सकते हैं:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

1
आपने मेरा दिन बचाया
हेलेन ज़ुकोवा

1
धन्यवाद, ऐसा कभी नहीं सोचा होगा
अम्मार हडज़िक

5
UIKeyboardFrameBeginUserInfoKey से बदलकर UIKeyboardFrameEndUserInfoKey ने चाल, thx किया।
user2408952

धन्यवाद, मैंने आधे दिन का निवेश किया, लेकिन यह पता नहीं लगा सका। मेरे दूसरे आधे दिन को बचाने के लिए धन्यवाद।
मनीष नाहर

@ अक्षय केवल संबंधित स्क्रीन सीमा में कीबोर्ड की शुरुआत और अंतिम समय सीमा।
s.zainulabideen

102

बदलने के UIKeyboardFrameBeginUserInfoKey

साथ में

UIKeyboardFrameEndUserInfoKey

नीचे Apple डॉक्स से है।

UIKeyboardFrameBeginUserInfoKey- एक NSValue ऑब्जेक्ट के लिए कुंजी जिसमें CGRect है जो स्क्रीन के निर्देशांक में कीबोर्ड के प्रारंभ फ्रेम की पहचान करता है।

UIKeyboardFrameEndUserInfoKey - एक NSValue ऑब्जेक्ट के लिए कुंजी एक CGRect युक्त है जो स्क्रीन के निर्देशांक में कीबोर्ड के अंतिम फ्रेम की पहचान करता है।


13
Apple को अपना उदाहरण कोड तब अपडेट करने की आवश्यकता है, क्योंकि यह iOS 11 पर अब काम नहीं करता है। इसके अलावा Apple डॉक्स से, जहां वे
UIKeyboardFrameBeginUserInfoKey का

मेरी समस्या का हल! सलाह के लिए धन्यवाद!
एर्नी

क्या कोई मुझे समझा सकता है जैसे मैं 5 साल का हूं, इन दोनों में क्या अंतर है, और यह तब क्यों फर्क पड़ता है जब UIScrollView को स्वचालित रूप से स्क्रॉल करने की बात आती है? मेरे लिए वास्तव में वह सराहनीय होगा। धन्यवाद!
मारियो

यह एक पाठ फ़ील्ड के लिए टैप करने के बाद काम नहीं कर रहा है, जिसमें numPad है। अगर अंकपैड के बाद मैं सामान्य टेक्स्टफील्ड पर टैप करता हूं, तो कीबोर्ड ऊपर नहीं आता है और जब यह खारिज होता है तो नीचे देखें
जैक डैनियल

7

इसे इस्तेमाल करे:

बदलें UIKeyboardFrameBeginUserInfoKeyके साथUIKeyboardFrameEndUserInfoKey


1
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];विधि कीबोर्डव्हीलचेंजफ्रेम: केवल एक बार नहीं चलाया जाता है, हो सकता है दो बार, या अधिक। कुछ कीबोर्ड में कभी-कभी शीर्ष पर विशेष टूलबार होता है, इस समय विधि कई बार चलेगी। तो, आपको UIKeyboardFrameEndUserInserKeyfo के साथ UIKeyboardFrameBeginUserInfoKey को बदलना होगा । कुंजीपटल।
सोलिनलियू

5

मेरे पास Xcode संस्करण 9.0 (9A235) का उपयोग करके एक समान मुद्दा था; हालांकि मैं स्विफ्ट का इस्तेमाल कर रहा था। मेरे कीबोर्डवॉश विधि में मैंने निम्नलिखित लिखा है:

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {

    let heightValue = keyboardSize.height    

    ...
}

अजीब बात है, पहली बार कीबोर्डव्हलशो को बुलाया गया था, ऊँचाईवैल्यू 216.0 था, लेकिन बाद की कॉल के दौरान यह 0 हो गया था! शायद यह एक Xcode बग है।

मैंने UIKeyboardFrameBeginUserInfoKey को UIKeyboardFrameEndUserInfoKey से बदल दिया, और इसने मेरे लिए समस्या को ठीक कर दिया।


1
मैंने भी ठीक यही चीज गौर की। यह केवल पहली बार कीबोर्ड शो में लागू होता है। अतिरिक्त दृश्य नियंत्रकों पर कीबोर्ड ने उस दृश्य नियंत्रक के लिए पहली बार दिखाए जाने वाले ऊंचाई को 0 बताया।
जैकफॉलकोड

5

यह मुद्दा iOS 11 पर हो रहा है।

बदलने के

"UIKeyboardFrameBeginUserInfoKey" के साथ "UIKeyboardFrameEndUserInfoKey"

जैसा कि नीचे दिखाया गया है कि समस्या ठीक हो जाएगी

उद्देश्य-सी कोड:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

स्विफ्ट 2.3:

let keyboardSize = (NfnPsgVar.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue().size

स्विफ्ट 3:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

3

नीचे दिए गए कोड का उपयोग करके कीबोर्ड की ऊंचाई की गणना करें।

यह सुरक्षित क्षेत्र और गैर-सुरक्षित क्षेत्र उपकरणों के साथ दोनों उपकरणों के लिए काम कर रहा है।

कोड:

@objc func keyboardWillShow(notification: Notification) {
    guard let keyboardFrame = notification.userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
            return
        }    
    let keyboardHeight: CGFloat                    
    if #available(iOS 11.0, *) {
       let window = UIApplication.shared.keyWindow
       let bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
       keyboardHeight = keyboardFrame.cgRectValue.height - bottomPadding
    } else {
       keyboardHeight = keyboardFrame.cgRectValue.height
    }
}

1

आपके दृष्टिकोण को दिखाए जाने से पहले फ्रेम की ऊंचाई प्राप्त करने की कोशिश की जा रही है, और यही कारण है कि यह 0 होना चाहिए जो मुझे यकीन नहीं है कि यह पहली कोशिश में क्यों नहीं है! यहाँ एक उदाहरण दिया गया है कि स्विफ्ट 4.2 में कीबोर्ड की ऊंचाई को सही ढंग से कैसे प्राप्त करें:

func keyboardWillShow(notification: Notification) {

    guard let userInfo = notification.userInfo else { return }

    guard var keyboardFrame: CGRect = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }

    keyboardFrame = view.convert(keyboardFrame, from: nil)

    let keyboardHeight = keyboardFrame.height
}

यह सही ढंग से कीबोर्ड फ्रेम गुण प्रदान करेगा जिससे पहले कीबोर्ड दिखाई देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.