IPhone के ऑनस्क्रीन कीबोर्ड की ऊंचाई कितनी है?


84

चित्र में ऊंचाई और परिदृश्य में ऊंचाई अंक में मापा जाता है।


2
यहाँ आप एक iPhone के सभी आयाम पा सकते हैं: iPhone आयाम
Pfitz

3
उस अंतिम "iPhone आयाम" लिंक का उपयोग न करें! यह आईओएस 8 के साथ आने से पहले 2011 से है, और ऑनस्क्रीन कीबोर्ड की ऊंचाई को अलग करने की अनुमति दी।
माइक Gledhill

@MikeGledhill ऑनस्क्रीन कीबोर्ड की ऊँचाई iOS 8 से भी पहले बदलती है।
ReDetection

संबंधित: यदि आप कीबोर्ड हाइट्स के वास्तविक मूल्यों (जैसे डिबग उद्देश्यों के लिए) की तलाश कर रहे हैं, तो आईओएस विदेशी भाषा कीबोर्ड हाइट्स देखें?
सेंसफुल

जवाबों:


211

मैंने आईओएस 7.1 में कीबोर्ड के फ्रेम को निर्धारित करने के लिए निम्नलिखित दृष्टिकोण का उपयोग किया।

मेरे विचार नियंत्रक की init विधि में, मैंने इसके लिए पंजीकरण किया UIKeyboardDidShowNotification:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];

फिर, मैंने keyboardOnScreen:कीबोर्ड के फ्रेम तक पहुंच प्राप्त करने के लिए निम्नलिखित कोड का उपयोग किया। यह कोड userInfoअधिसूचना से शब्दकोश प्राप्त करता है और फिर NSValueसंबंधित के साथ पहुंचता है UIKeyboardFrameEndUserInfoKey। फिर आप CGRect पर पहुँच सकते हैं और इसे अपने व्यू कंट्रोलर के व्यू के निर्देशांक में बदल सकते हैं। वहां से, आप उस फ्रेम के आधार पर किसी भी गणना की आवश्यकता कर सकते हैं।

-(void)keyboardOnScreen:(NSNotification *)notification 
 {
        NSDictionary *info  = notification.userInfo;
        NSValue      *value = info[UIKeyboardFrameEndUserInfoKey];

        CGRect rawFrame      = [value CGRectValue];
        CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];

        NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
 }

तीव्र

और स्विफ्ट के साथ समान कार्यान्वयन:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)


@objc
func keyboardDidShow(notification: Notification) {
    guard let info = notification.userInfo else { return }
    guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
    let keyboardFrame = frameInfo.cgRectValue
    print("keyboardFrame: \(keyboardFrame)")
}

4
हालांकि ऐसा लगता है कि यह थोड़ा सा शामिल है, यह कीबोर्ड के आकार को हार्ड-कोड करने से बेहतर है। सही उत्तर।
n13

2
इस जवाब को वोट दिया और इस सवाल का जवाब दिया। ओपी निश्चित रूप से नहीं जानता कि वह किस बारे में बात कर रहा है। सावधान लोग! यह उत्तर सही है!
superarts.org

2
लैंडस्केप के लिए एक पूरक: अगर (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size. उपलब्धता; } और {_keyboardHeight = keyboardFrame.size.height; }
लियांगवेग

3
क्या कीबोर्ड को दिखाए बिना ऐसा करने का कोई तरीका है? मेरे मामले में, मैं एक ही ऊंचाई वाले कीबोर्ड के पीछे कुछ करना चाहता हूं (इसी तरह से दूतों के पास चीजें हैं)
जॉन

@ superarts.org इस प्रश्न पर मतदान करने की आवश्यकता नहीं है; लोग इसके लिए सबसे अधिक संभावना
खोजेंगे

46

याद रखें कि, iOS 8 के साथ, ऑनस्क्रीन कीबोर्ड का आकार अलग-अलग हो सकता है। यह मत समझो कि ऑनस्क्रीन कीबोर्ड हमेशा (एक विशिष्ट ऊंचाई के साथ) या अदृश्य दिखाई देगा ।

अब, iOS 8 के साथ, उपयोगकर्ता टेक्स्ट-प्रीडिक्शन क्षेत्र को भी स्वाइप कर सकता है ... और जब वे ऐसा करते हैं, तो यह ऐप के keyboardWillShowईवेंट को फिर से बंद कर देगा ।

यह बहुत सी विरासत कोड के नमूने को तोड़ देगा , जिसने एक keyboardWillShowघटना को लिखने की सिफारिश की , जो ऑनस्क्रीन कीबोर्ड की वर्तमान ऊंचाई को मापता है, और इस (पूर्ण) राशि से पृष्ठ पर अपने नियंत्रण को ऊपर या नीचे स्थानांतरित कर रहा है।

यहां छवि विवरण दर्ज करें

दूसरे शब्दों में, यदि आपको कोई नमूना कोड दिखाई देता है, जो आपको सिर्फ एक keyboardWillShowघटना जोड़ने के लिए कहता है , कीबोर्ड की ऊँचाई को मापें, तो इस राशि से अपने नियंत्रणों की ऊँचाइयों का आकार बदलें, यह अब हमेशा काम नहीं करेगा।

उपरोक्त मेरे उदाहरण में, मैंने निम्न साइट से नमूना कोड का उपयोग किया, जो ऊर्ध्वाधर बाधाओं को constantमान देता है।

ऑटोलेयूट का अभ्यास करना

मेरे ऐप में, मैंने अपने लिए एक बाधा जोड़ी UITextView, स्क्रीन के नीचे सेट किया। जब स्क्रीन पहली बार दिखाई दी, तो मैंने इस प्रारंभिक ऊर्ध्वाधर दूरी को संग्रहीत किया।

फिर, जब भी मेरी keyboardWillShowघटना से पर्दा उठ जाता है, मैं इस मूल बाधा मूल्य में (नई) कीबोर्ड ऊंचाई जोड़ देता हूं (इसलिए बाधा नियंत्रण की ऊंचाई का आकार बदल देती है)।

यहां छवि विवरण दर्ज करें

हाँ। यह बदसूरत है।

और मैं थोड़ा नाराज हूं / हैरान हूं कि XCode 6 की भयानक-दर्दनाक ऑटोलायट हमें नियंत्रण के बॉटम्स को या तो स्क्रीन के नीचे, या ऑनस्क्रीन कीबोर्ड के ऊपर से जोड़ने की अनुमति नहीं देती है।

शायद मुझे कुछ याद आ रहा है।

मेरी पवित्रता से इतर।


वास्तव में, कीबोर्ड का आकार हमेशा भिन्न होता है, यहां तक ​​कि पुराने iOS संस्करणों पर भी। उदाहरण के लिए चीनी भाषा में लिखावट की जाँच करें
रीटेटेक्शन

उफ़, यह एहसास नहीं हुआ। मुझे बस यह अजीब लगा कि इतने सारे "कीबोर्ड विल्सशो" के नमूनों ने हमेशा यह मान लिया कि यह घटना सिर्फ एक बार होगी जब कीबोर्ड दिखाई देगा या गायब हो जाएगा .. ऑनस्क्रीन रहने वाले कीबोर्ड के साथ सामना करने के लिए कोई कार्यक्षमता नहीं है, लेकिन इसका आकार बदल रहा है।
माइक गिल्डहिल

1
@MikeGledhill मुझे लगता है कि आप "UIKeyboardWillChangeFrameNotification" का उपयोग रोटेशन बदलने या दिखाने (/ छुपाने) के कारण पाठ भविष्यवाणी बार के लिए फ्रेम के परिवर्तन के लिए करेंगे ...
अब्दुलरहमान शताब्दी

मैंने सिर्फ अपने ऐप के साथ यह परीक्षण किया। UIKeyboardWillChangeFrameNotification हमेशा अच्छी तरह के रूप में keyboardWillShow घटना, जब भी मैं या तो कुंजीपटल दिखाई देते हैं या चालू या बंद पाठ भविष्यवाणी क्षेत्र बारी कर बुलाया जाता है। तो यह वास्तव में बहुत मदद नहीं करता है। मेरा कहना है ... उपयोगकर्ताओं को इन घटनाओं से थोड़ा सावधान रहने की जरूरत है, बस।
माइक गल्डहिल

1
यह बहुत अधिक ध्यान क्यों नहीं देता है?
rfoo

30

कीबोर्ड की ऊंचाई पोर्ट्रेट मोड के लिए 216pts और लैंडस्केप मोड के लिए 162pts है।

स्रोत


135
यदि आप स्व-उत्तर वाले प्रश्नों को पोस्ट करने जा रहे हैं, तो कम से कम सभ्य उत्तर दें। कीबोर्ड का आकार अधिसूचना ऑब्जेक्ट से प्राप्त किया जाना चाहिए, न कि किसी वेबसाइट से लिया गया हार्ड-कोडेड मान। यहां
जर्थुरटन

16
@jrturton सवाल यह नहीं है कि कार्यक्रम को ऊंचाई पर कैसे पाया जाए। यह सवाल केवल प्रोग्रामर के लिए ही उपयोगी नहीं है, बल्कि ग्राफिक्स डिजाइनरों और ऐसे भी हैं। आप जो उत्तर पूछ रहे हैं वह दूसरे प्रश्न का है। वास्तव में, उस उत्तर के साथ एक और सवाल है: stackoverflow.com/a/7302291/310121
एरिक बी

48
@ एरिक बी सावधान रहें। कीबोर्ड का आकार भाषा और कीबोर्ड के प्रकार पर निर्भर करता है।
गेब्रियल

13
अपने स्वयं के लिए, कभी भी हार्ड-कोडित मूल्य का उपयोग न करें! एक मजबूत उदाहरण के रूप में, एक उपयोगकर्ता विभाजन (दो-भाग) कीबोर्ड का उपयोग कर सकता है, जो ऊंचाई के बारे में ज्यादा परवाह नहीं करता है।
तिमो

6
यह उत्तर आलसी और खतरनाक है। UIKeyboardDidShowNotification से कीबोर्ड की ऊँचाई प्राप्त करें, क्योंकि वास्तविक मूल्य iOS प्रमुख रिलीज़ संस्करणों के बीच बदल जाता है। नीचे केन का उत्तर देखें।
अलेक्जेंडर

16

संस्करण नोट: यह अब iOS 9 और 10 में मूल्य नहीं है, क्योंकि वे कस्टम कीबोर्ड आकार का समर्थन करते हैं।

यह मॉडल और क्विक टाइप बार पर निर्भर करता है:

यहां छवि विवरण दर्ज करें

http://www.idev101.com/code/User_Interface/sizes.html


1
संस्करण नोट : यह अब iOS 9 और 10 में मूल्य नहीं है, क्योंकि वे कस्टम कीबोर्ड आकार का समर्थन करते हैं।
रैप्टर

10

कीबोर्ड की ऊँचाई मॉडल पर निर्भर करती है, क्विक टाइप बार, उपयोगकर्ता सेटिंग्स ... सबसे अच्छा तरीका है, गणना की गणना:

स्विफ्ट 3.0

    var heightKeyboard : CGFloat?

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    }

    func keyboardShown(notification: NSNotification) {
           if let infoKey  = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
               let rawFrame = (infoKey as AnyObject).cgRectValue {
               let keyboardFrame = view.convert(rawFrame, from: nil)
               self.heightKeyboard = keyboardFrame.size.height
               // Now is stored in your heightKeyboard variable
           }
    }

8

मुझे नवीनतम उत्तर नहीं मिल रहा है, इसलिए मैं इसे सभी सिम्युलेटर के साथ जांचता हूं। (iOS 11.0)


डिवाइस | स्क्रीन की ऊँचाई | पोर्ट्रेट | परिदृश्य

iPhone 4 | 480.0 | 216.0 | 162.0

iPhone 5, iPhone 5s, iPhone SE | 568.0 | 216.0 | 162.0

iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667.0 | 216.0 | 162.0

iPhone 6 प्लस, iPhone 7 plus, iPhone 8 plus | 736.0 | 226.0 | 162.0

iPad 5 वीं पीढ़ी, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0


धन्यवाद!


0

आई - फ़ोन

KeyboardSizes:

  1. 5 एस, एसई, 5, 5 सी (320 × 568) कीबोर्डसाइज = (0.0, 352.0, 320.0, 216.0) कीबोर्डसाइज = (0.0, 315.0, 320.0, 253.0)

2.6S, 6,7,8: (375 × 667): कीबोर्डसाइज़ = (0.0, 407.0, 375.0, 260)।

3.6 +, 6S +, 7+, 8+: (414 × 736) कीबोर्डसाइज = (0.0, 465.0, 414.0, 271.0)

4.XS, X: (375 X 812) कीबोर्डसाइज = (0.0, 477.0, 375.0, 335.0)

5.XR, XSMAX ((414 x 896) कीबोर्डसाइज = (0.0, 550.0, 414.0, 346.4)

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