चित्र में ऊंचाई और परिदृश्य में ऊंचाई अंक में मापा जाता है।
चित्र में ऊंचाई और परिदृश्य में ऊंचाई अंक में मापा जाता है।
जवाबों:
मैंने आईओएस 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)")
}
याद रखें कि, iOS 8 के साथ, ऑनस्क्रीन कीबोर्ड का आकार अलग-अलग हो सकता है। यह मत समझो कि ऑनस्क्रीन कीबोर्ड हमेशा (एक विशिष्ट ऊंचाई के साथ) या अदृश्य दिखाई देगा ।
अब, iOS 8 के साथ, उपयोगकर्ता टेक्स्ट-प्रीडिक्शन क्षेत्र को भी स्वाइप कर सकता है ... और जब वे ऐसा करते हैं, तो यह ऐप के keyboardWillShow
ईवेंट को फिर से बंद कर देगा ।
यह बहुत सी विरासत कोड के नमूने को तोड़ देगा , जिसने एक keyboardWillShow
घटना को लिखने की सिफारिश की , जो ऑनस्क्रीन कीबोर्ड की वर्तमान ऊंचाई को मापता है, और इस (पूर्ण) राशि से पृष्ठ पर अपने नियंत्रण को ऊपर या नीचे स्थानांतरित कर रहा है।
दूसरे शब्दों में, यदि आपको कोई नमूना कोड दिखाई देता है, जो आपको सिर्फ एक keyboardWillShow
घटना जोड़ने के लिए कहता है , कीबोर्ड की ऊँचाई को मापें, तो इस राशि से अपने नियंत्रणों की ऊँचाइयों का आकार बदलें, यह अब हमेशा काम नहीं करेगा।
उपरोक्त मेरे उदाहरण में, मैंने निम्न साइट से नमूना कोड का उपयोग किया, जो ऊर्ध्वाधर बाधाओं को constant
मान देता है।
मेरे ऐप में, मैंने अपने लिए एक बाधा जोड़ी UITextView
, स्क्रीन के नीचे सेट किया। जब स्क्रीन पहली बार दिखाई दी, तो मैंने इस प्रारंभिक ऊर्ध्वाधर दूरी को संग्रहीत किया।
फिर, जब भी मेरी keyboardWillShow
घटना से पर्दा उठ जाता है, मैं इस मूल बाधा मूल्य में (नई) कीबोर्ड ऊंचाई जोड़ देता हूं (इसलिए बाधा नियंत्रण की ऊंचाई का आकार बदल देती है)।
हाँ। यह बदसूरत है।
और मैं थोड़ा नाराज हूं / हैरान हूं कि XCode 6 की भयानक-दर्दनाक ऑटोलायट हमें नियंत्रण के बॉटम्स को या तो स्क्रीन के नीचे, या ऑनस्क्रीन कीबोर्ड के ऊपर से जोड़ने की अनुमति नहीं देती है।
शायद मुझे कुछ याद आ रहा है।
मेरी पवित्रता से इतर।
कीबोर्ड की ऊंचाई पोर्ट्रेट मोड के लिए 216pts और लैंडस्केप मोड के लिए 162pts है।
संस्करण नोट: यह अब iOS 9 और 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
}
}
मुझे नवीनतम उत्तर नहीं मिल रहा है, इसलिए मैं इसे सभी सिम्युलेटर के साथ जांचता हूं। (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
धन्यवाद!
आई - फ़ोन
KeyboardSizes:
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)