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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন