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 فیصلہ ڈویلپر پر چھوڑتا ہے، کسی بھی منظر نامے کے لیے لچکدار APIs فراہم کرتا ہے۔
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 استعمال کرتے وقت، نچلے مارجن کی پابندیوں کو تبدیل کرنا بھی کام کرتا ہے: اسٹیک ویو خود بخود چائلڈ عناصر کو دوبارہ تقسیم کرتا ہے۔ تاہم، اگر اسٹیک ویو UIScrollView کے اندر ہے، تو اس کے اندر کی پابندیوں کے بجائے خود scroll view کے contentInset کا انتظام کرنا بہتر ہے۔
IQKeyboardManager سب سے مقبول لائبریری ہے (GitHub پر 16,000 سے زیادہ ستارے) جو کنٹرولر میں کوڈ کی ایک لائن کے بغیر خودکار Keyboard Avoidance لاگو کرتی ہے۔ یہ ٹیکسٹ فیلڈز کو ٹریک کرنے کے لیے method swizzling استعمال کرتی ہے اور کی بورڈ ظاہر ہونے پر خود بخود مواد کو اوپر اٹھاتی ہے۔
لائبریری لچکدار ترتیبات فراہم کرتی ہے: آپ فیلڈ اور کی بورڈ کے درمیان فاصلہ بتا سکتے ہیں، مخصوص کنٹرولرز کے لیے فعال/غیر فعال کر سکتے ہیں، اور UITextView اور کسٹم انپٹ ویوز کے لیے رویہ ترتیب دے سکتے ہیں۔ تاہم، method swizzling دوسری لائبریریوں سے متصادم ہو سکتا ہے، اور Apple غیر متوقع ضمنی اثرات کی وجہ سے پروڈکشن کوڈ کے لیے اس طریقے کی سفارش نہیں کرتا۔
متبادلات میں TPKeyboardAvoiding (ایک ہلکی لائبریری، ~2,000 ستارے) اور کمیونٹی کا KeyboardManager شامل ہیں۔ جدید منصوبوں کے لیے، Apple iOS 15+ کے بلٹ ان ٹولز استعمال کرنے کی سفارش کرتا ہے، اور کم سے کم ورژن والے منصوبوں کے لیے — contentInset کے ساتھ UIScrollView، جو سب سے قابل اعتماد بلٹ ان حل ہے۔
اکثر پوچھے گئے سوالات
Keyboard Avoidance کی بورڈ ظاہر ہونے پر انٹرفیس کو منتقل کرنے کی ایک تکنیک ہے تاکہ فعال ٹیکسٹ فیلڈ نظر آتا رہے۔ یہ خودکار لے آؤٹ موافقت کے لیے UIScrollView، Keyboard Notifications یا iOS 15+ کے Keyboard Layout Guide کے ذریعے لاگو کیا جاتا ہے۔
آپ کی بورڈ ظاہر ہونے پر مرکزی ویو کے 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں