Keyboard Avoidance iOS एप्लिकेशन इंटरफ़ेस को सिस्टम कीबोर्ड के प्रकट होने पर अनुकूलित करने की एक तकनीक है, जो टेक्स्ट फ़ील्ड और अन्य इंटरैक्टिव तत्वों को ढक सकता है। इस तंत्र के कार्यान्वयन के बिना, उपयोगकर्ता शारीरिक रूप से नहीं देख सकता कि वह क्या टाइप कर रहा है, जिससे त्रुटियाँ होती हैं और उपयोग अनुभव खराब होता है। Apple Developer Documentation (2026) के अनुसार, iOS 15 से शुरू करके UIScrollView को UIScrollView.keyboardLayoutGuide के साथ संयोजन में उपयोग करने की अनुशंसा की जाती है ताकि सामग्री विस्थापन का स्वचालित प्रबंधन हो सके।
मुख्य बिंदु
Keyboard Avoidance तकनीकों का एक समूह है जो iOS पर सिस्टम कीबोर्ड प्रकट होने पर सक्रिय इनपुट फ़ील्ड की दृश्यता सुनिश्चित करता है। मूल समस्या: कीबोर्ड स्क्रीन का 50% तक घेर लेता है और इंटरफ़ेस के निचले आधे हिस्से को ढक देता है, जिसमें टेक्स्ट फ़ील्ड, सबमिट बटन और अन्य तत्व शामिल हैं।
कार्यान्वयन के तीन मुख्य दृष्टिकोण हैं: Keyboard Notifications के माध्यम से मैन्युअल प्रबंधन (क्लासिक तरीका, iOS 3.0 से काम करता है), स्वचालित स्क्रॉलिंग के साथ UIScrollView का उपयोग (Apple द्वारा अनुशंसित), और Keyboard Layout Guide (iOS 15+ के साथ आधुनिक तरीका)। चुनाव न्यूनतम समर्थित iOS संस्करण और इंटरफ़ेस जटिलता पर निर्भर करता है।
Apple के अनुसार, Keyboard Avoidance की कमी समीक्षा के दौरान एप्लिकेशन अस्वीकृति के सबसे सामान्य कारणों में से एक है, यदि टेक्स्ट फ़ील्ड कीबोर्ड द्वारा पूरी तरह से ढके हुए हैं। App Store Guidelines स्पष्ट रूप से आवश्यकता करती हैं कि सभी इंटरैक्टिव तत्व सक्रिय इनपुट के दौरान सुलभ रहें।
iOS स्वचालित रूप से यह निर्धारित नहीं कर सकता कि कौन सा तत्व दृश्यमान रहना चाहिए क्योंकि यह इंटरफ़ेस की शब्दार्थ संरचना नहीं जानता। एक साधारण फ़ॉर्म में एक टेक्स्ट फ़ील्ड के साथ, पूरी स्क्रीन को ऊपर ले जाना पर्याप्त है। एक जटिल इंटरफ़ेस में कस्टम पैनल, फ़्लोटिंग बटन और कई अनुभागों के साथ, विभिन्न व्यवहार तर्क की आवश्यकता होती है।
इसके अलावा, कुछ एप्लिकेशन जानबूझकर सामग्री को स्थानांतरित नहीं करते हैं — उदाहरण के लिए, कीबोर्ड कैलकुलेटर या संपादक जहाँ कीबोर्ड कार्यक्षेत्र का हिस्सा है। iOS निर्णय डेवलपर पर छोड़ता है, किसी भी परिदृश्य के लिए लचीली API प्रदान करता है।
UIKeyboardWillShowNotification मुख्य सूचना है जो iOS कीबोर्ड प्रकट होने से पहले भेजता है। इसमें UIResponder.keyboardFrameEndUserInfoKey शब्दकोश में कीबोर्ड की अंतिम स्थिति के साथ एक CGRect होता है, साथ ही UIResponder.keyboardAnimationDurationUserInfoKey में एनिमेशन अवधि भी होती है।
सूचना हैंडलर को सक्रिय टेक्स्ट फ़ील्ड और कीबोर्ड के बीच ओवरलैप की गणना करनी चाहिए, फिर कंटेनर के निचले मार्जिन (contentInset या frame) को बदलना चाहिए। यदि फ़ील्ड कीबोर्ड के ऊपरी किनारे से नीचे है, तो सामग्री ओवरलैप की मात्रा से ऊपर स्थानांतरित हो जाती है। कीबोर्ड छिपने पर, मार्जिन अपने मूल मान पर वापस आ जाता है।
@objc func keyboardWillShow(_ notification: Notification) {
guard let keyboardFrame = notification
.userInfo?[UIResponder.keyboardFrameEndUserInfoKey]
as? CGRect else { return }
let keyboardHeight = keyboardFrame.height
scrollView.contentInset.bottom = keyboardHeight
scrollView.verticalScrollIndicatorInsets.bottom = keyboardHeight
}
सूचनाओं का उपयोग करते समय, एनिमेशन को संभालना सिस्टम कीबोर्ड के साथ समकालिक रूप से महत्वपूर्ण है। iOS एनिमेशन वक्र (UIResponder.keyboardAnimationCurveUserInfoKey) और अवधि प्रदान करता है। इन मापदंडों के साथ UIView.animate का उपयोग करें ताकि सामग्री कीबोर्ड के प्रकट होने के साथ ही सुचारू रूप से स्थानांतरित हो।
UIScrollView.keyboardLayoutGuide Keyboard Avoidance के लिए एक आधुनिक API है, जो iOS 15 में पेश की गई है। यह स्वचालित रूप से कीबोर्ड की स्थिति को ट्रैक करता है और Auto Layout बाधाओं को अपडेट करता है जो इंटरफ़ेस के निचले भाग को कीबोर्ड के ऊपरी किनारे से जोड़ती हैं।
इसका उपयोग करने के लिए, बस UIScrollView या UIStackView पर layout guide को सक्रिय करें और उसमें निचली सामग्री बाधा संलग्न करें। सूचनाओं, ऊँचाई गणना या एनिमेशन के साथ किसी मैन्युअल कार्य की आवश्यकता नहीं है — सिस्टम सब कुछ स्वचालित रूप से करता है, कीबोर्ड के प्रकट और छिपने के साथ एनिमेशन को सिंक्रोनाइज़ करता है।
// Keyboard Layout Guide को सक्षम करें (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true
// निचले के बाध्य को कीबोर्ड के ऊपर पिन करें
contentView.bottomAnchor.constraint(
equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true
followsUndockedKeyboard एक गुण है जो निर्धारित करता है कि गाइड को कीबोर्ड पर प्रतिक्रिया देनी चाहिए जो निचले किनारे से अलग हो सकता है (iPad पर)। इसे true पर सेट करें केवल यदि इंटरफ़ेस फ़्लोटिंग कीबोर्ड के साथ सही ढंग से काम करता है। iPhone के लिए, यह गुण अनदेखा किया जाता है — कीबोर्ड हमेशा निचले किनारे से जुड़ा होता है।
UIScrollView एक कंटेनर है जिसे Apple Keyboard Avoidance के आधार के रूप में उपयोग करने की अनुशंसा करता है। जब कीबोर्ड प्रकट होता है, तो scroll view अपना contentInset.bottom बढ़ाता है, जिससे सामग्री ऊपर स्क्रॉल हो सकती है और सक्रिय फ़ील्ड दृश्यमान हो सकती है।
मुख्य विधि scrollRectToVisible है, जो प्रोग्रामेटिक रूप से scroll view को स्क्रॉल करती है ताकि निर्दिष्ट आयत (सक्रिय टेक्स्ट फ़ील्ड) दृश्य क्षेत्र में आ जाए। contentInset परिवर्तन को scrollRectToVisible कॉल के साथ संयोजित करने से यह सुनिश्चित होता है कि फ़ील्ड न केवल खुला है बल्कि दृश्य क्षेत्र के ऊपरी भाग में भी स्थित है।
func adjustScrollForKeyboard(
keyboardHeight: CGFloat,
activeField: UIView
) {
scrollView.contentInset.bottom = keyboardHeight
scrollView.verticalScrollIndicatorInsets.bottom = keyboardHeight
var visibleRect = view.frame
visibleRect.size.height -= keyboardHeight
if activeField.frame.origin.y > visibleRect.maxY {
scrollView.scrollRectToVisible(
activeField.frame, animated: true
)
}
}
UITableView के साथ UIViewController के लिए, Apple UITableViewController का उपयोग करने की अनुशंसा करता है, जो कीबोर्ड प्रकट होने पर स्वचालित रूप से contentInset समायोजित करता है। यदि आप जोड़ी गई तालिका के साथ UIViewController का उपयोग करते हैं, तो आपको मैन्युअल रूप से Keyboard Avoidance लागू करना होगा — UITableViewController कस्टम नियंत्रकों के लिए यह व्यवहार प्रदान नहीं करता है।
Auto Layout एनिमेशन प्रोग्राम किए बिना Keyboard Avoidance लागू करने की अनुमति देता है — बस किसी विशिष्ट बाधा की गतिविधि (isActive) बदलें या कीबोर्ड सूचना के जवाब में उसका स्थिरांक अपडेट करें।
एक विशिष्ट योजना: scroll view या सामग्री के निचले मार्जिन के लिए IBOutlet NSLayoutConstraint बनाएँ, और keyboardWillShow हैंडलर में constraint.constant = keyboardHeight सेट करें, और keyboardWillHide में इसे 0 पर रीसेट करें। सुचारू संक्रमण के लिए animate ब्लॉक के अंदर layoutIfNeeded के माध्यम से लेआउट अपडेट करें।
| दृष्टिकोण | iOS संस्करण | जटिलता | अनुशंसा |
|---|---|---|---|
| Keyboard Notifications | iOS 3.0+ | मध्यम | पुराने संस्करणों के समर्थन के लिए |
| UIScrollView + contentInset | iOS 2.0+ | निम्न | सार्वभौमिक दृष्टिकोण, Apple द्वारा अनुशंसित |
| Keyboard Layout Guide | iOS 15+ | न्यूनतम | आधुनिक दृष्टिकोण (iOS 15+) |
| IQKeyboardManager | iOS 8.0+ | शून्य | त्वरित समाधान, लोकप्रिय लाइब्रेरी |
UIStackView का उपयोग करते समय, निचले मार्जिन बाधाओं को बदलना भी काम करता है: stack view स्वचालित रूप से चाइल्ड तत्वों को पुनर्वितरित करता है। हालाँकि, यदि stack view UIScrollView के अंदर है, तो उसके अंदर बाधाओं के बजाय स्वयं scroll view के contentInset का प्रबंधन करना बेहतर है।
IQKeyboardManager सबसे लोकप्रिय लाइब्रेरी है (GitHub पर 16,000 से अधिक स्टार) जो नियंत्रक में कोड की एक भी पंक्ति के बिना स्वचालित Keyboard Avoidance लागू करती है। यह टेक्स्ट फ़ील्ड को ट्रैक करने के लिए method swizzling का उपयोग करती है और कीबोर्ड प्रकट होने पर स्वचालित रूप से सामग्री को ऊपर उठाती है।
लाइब्रेरी लचीली सेटिंग्स प्रदान करती है: आप फ़ील्ड और कीबोर्ड के बीच दूरी निर्दिष्ट कर सकते हैं, विशिष्ट नियंत्रकों के लिए सक्षम/अक्षम कर सकते हैं, और UITextView और कस्टम इनपुट व्यू के लिए व्यवहार कॉन्फ़िगर कर सकते हैं। हालाँकि, method swizzling अन्य लाइब्रेरीज़ के साथ विरोध कर सकता है, और Apple अप्रत्याशित दुष्प्रभावों के कारण उत्पादन कोड के लिए इस दृष्टिकोण की अनुशंसा नहीं करता है।
विकल्पों में TPKeyboardAvoiding (एक हल्की लाइब्रेरी, ~2000 स्टार) और समुदाय से KeyboardManager शामिल हैं। आधुनिक परियोजनाओं के लिए, Apple iOS 15+ के अंतर्निहित टूल का उपयोग करने की अनुशंसा करता है, और कम न्यूनतम संस्करण वाली परियोजनाओं के लिए — contentInset के साथ UIScrollView, जो सबसे विश्वसनीय अंतर्निहित समाधान है।
अक्सर पूछे जाने वाले प्रश्न
Keyboard Avoidance कीबोर्ड प्रकट होने पर इंटरफ़ेस को स्थानांतरित करने की एक तकनीक है, ताकि सक्रिय टेक्स्ट फ़ील्ड दृश्यमान रहे। इसे स्वचालित लेआउट अनुकूलन के लिए UIScrollView, Keyboard Notifications या Keyboard Layout Guide iOS 15+ के माध्यम से कार्यान्वित किया जाता है।
आप कीबोर्ड प्रकट होने पर मुख्य व्यू के frame को बदल सकते हैं, इसकी ऊँचाई को कीबोर्ड की ऊँचाई से कम करके। सूचना के userInfo से पैरामीटर के साथ एनिमेशन ब्लॉक में frame को अपडेट करने के लिए UIKeyboardWillShowNotification और UIKeyboardWillHideNotification का उपयोग करें।
keyboardLayoutGuide एक UILayoutGuide है जो UIScrollView (iOS 15+) में जोड़ा जाता है। यह स्वचालित रूप से कीबोर्ड के ऊपरी किनारे को ट्रैक करता है और कीबोर्ड प्रकट और छिपने पर अपनी NSLayoutConstraint को अपडेट करता है, सिस्टम कीबोर्ड के साथ एनिमेशन को सिंक्रोनाइज़ करता है।
IQKeyboardManager सबसे लोकप्रिय है, इसमें कोड की आवश्यकता नहीं है। TPKeyboardAvoiding एक हल्का विकल्प है। नई परियोजनाओं के लिए, iOS 15+ के अंतर्निहित टूल बेहतर हैं, क्योंकि तृतीय-पक्ष लाइब्रेरीज़ method swizzling का उपयोग करती हैं, जिसकी Apple अनुशंसा नहीं करता है।
यदि आप IQKeyboardManager का उपयोग करते हैं, तो विशिष्ट UIViewController के लिए enabled = false कॉल करें। मैन्युअल कार्यान्वयन के लिए, बस उस स्क्रीन पर कीबोर्ड सूचनाओं की सदस्यता न लें या कीबोर्ड प्रकट होने पर contentInset को शून्य पर रीसेट करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें