Keyboard Avoidance — mohiyati, amalga oshirish usullari va interfeysning siljishi

Muallif: IT Sectr Nashr etilgan: 2026-07-09 O'qish vaqti: 9 daq

Keyboard Avoidance — bu tizim klaviaturasi paydo bo'lganda iOS ilovasi interfeysini moslashtirish texnikasi bo'lib, u matn maydonlari va boshqa interaktiv elementlarni yopib qo'yishi mumkin. Ushbu mexanizmsiz foydalanuvchi nima kiritayotganini jismonan ko'rmaydi, bu esa xatolarga va foydalanish tajribasining yomonlashishiga olib keladi. Apple Developer Documentation (2026) ma'lumotlariga ko'ra, iOS 15 dan boshlab kontent siljishini avtomatik boshqarish uchun UIScrollView ni UIScrollView.keyboardLayoutGuide bilan birgalikda ishlatish tavsiya etiladi.

Asosiy fikrlar

  • Keyboard Avoidance — faol matn maydoni ko'rinib turishi uchun klaviatura paydo bo'lganda kontentni yuqoriga siljitish.
  • UIKeyboardWillShowNotification va UIKeyboardWillHideNotification layout-ni moslashtirish uchun klaviatura o'lchami va animatsiyasini taqdim etadi.
  • UIScrollView.keyboardLayoutGuide (iOS 15+) klaviatura paydo bo'lganda va yashiringanda avtomatik ravishda bo'shliqlarni boshqaradi.
  • IQKeyboardManager — qo'lda kod yozmasdan avtomatik Keyboard Avoidance uchun mashhur uchinchi tomon kutubxonasi.
  • UITextFieldDelegate siljishni aniq boshqarish uchun tahrirlash boshlanishi va tugashini kuzatish imkonini beradi.

Keyboard Avoidance nima

Keyboard Avoidance — iOS da tizim klaviaturasi paydo bo'lganda faol kiritish maydonining ko'rinishini ta'minlaydigan texnikalar to'plamidir. Asosiy muammo: klaviatura ekranning 50% gacha qismini egallaydi va interfeysning pastki yarmini, jumladan matn maydonlari, jo'natish tugmalari va boshqa elementlarni yopadi.

Amalga oshirishning uchta asosiy yondashuvi mavjud: Keyboard Notifications orqali qo'lda boshqarish (klassik usul, iOS 3.0 dan ishlaydi), avtomatik aylantirish bilan UIScrollView dan foydalanish (Apple tomonidan tavsiya etiladi) va Keyboard Layout Guide (iOS 15+ dan zamonaviy usul). Tanlov eng kam qo'llab-quvvatlanadigan iOS versiyasiga va interfeys murakkabligiga bog'liq.

Apple ma'lumotlariga ko'ra, Keyboard Avoidance ning yo'qligi, matn maydonlari klaviatura tomonidan to'liq yopilganda ilovalarning rad etilishining eng keng tarqalgan sabablaridan biridir. App Store ko'rsatmalari barcha interaktiv elementlarning faol kiritish vaqtida mavjud bo'lishini aniq talab qiladi.

Nega iOS buni avtomatik bajarmaydi

iOS qaysi element ko'rinadigan bo'lishi kerakligini avtomatik aniqlay olmaydi, chunki u interfeys semantikasini bilmaydi. Bitta matn maydoni bo'lgan oddiy formada butun ekranni siljitish kifoya. Maxsus panellar, suzuvchi tugmalar va bir nechta bo'limlarga ega murakkab interfeysda har xil xatti-harakatlar mantig'i talab qilinadi.

Bundan tashqari, ba'zi ilovalar ataylab kontentni siljitmaydi — masalan, klaviatura kalkulyatorlari yoki muharrirlar, bu erda klaviatura ish maydonining bir qismidir. iOS har qanday stsenariy uchun moslashuvchan API-larni taqdim etib, qarorni ishlab chiqaruvchiga qoldiradi.

Keyboard Frame Notifications

UIKeyboardWillShowNotification — iOS klaviatura paydo bo'lishidan oldin yuboradigan asosiy bildirishnomadir. U UIResponder.keyboardFrameEndUserInfoKey lug'atida klaviaturaning yakuniy pozitsiyasi bilan CGRect, shuningdek UIResponder.keyboardAnimationDurationUserInfoKey da animatsiya davomiyligini o'z ichiga oladi.

Bildirishnoma ishlovchisi faol matn maydoni va klaviatura o'rtasidagi qoplanishni hisoblashi, so'ngra konteynerning pastki bo'shlig'ini (contentInset yoki frame) o'zgartirishi kerak. Maydon klaviaturaning yuqori chetidan pastda bo'lsa, kontent qoplanish miqdoriga qadar yuqoriga siljiydi. Klaviatura yashiringanda bo'shliq asl qiymatiga qaytadi.

swift
@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
}

Bildirishnomalardan foydalanganda animatsiyani tizim klaviaturasi bilan sinxronlashtirish muhimdir. iOS animatsiya egri chizig'ini (UIResponder.keyboardAnimationCurveUserInfoKey) va davomiylikni uzatadi. UIView.animate ni ushbu parametrlar bilan ishlating, shunda kontent klaviatura bilan bir vaqtda silliq siljiydi.

iOS 15+ da Keyboard Layout Guide

UIScrollView.keyboardLayoutGuide — iOS 15 da taqdim etilgan Keyboard Avoidance uchun zamonaviy API. U klaviaturaning o'rnini avtomatik kuzatadi va interfeysning pastki qismini klaviaturaning yuqori cheti bilan bog'laydigan Auto Layout cheklovlarini yangilaydi.

Foydalanish uchun UIScrollView yoki UIStackView da layout guide-ni faollashtirish va kontentning pastki cheklovini unga ulash kifoya. Bildirishnomalar, balandlikni hisoblash va animatsiya bilan hech qanday qo'l ishi talab qilinmaydi — tizim hamma narsani avtomatik bajaradi, animatsiyani klaviaturaning paydo bo'lishi va yashirinishi bilan sinxronlashtiradi.

swift
// Keyboard Layout Guide-ni yoqing (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true

// Pastki cheklovni klaviatura tepasiga mahkamlang
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard — guide pastki chetidan ajratilishi mumkin bo'lgan klaviaturaga (iPad da) reaksiya berishini aniqlaydigan xususiyat. Faqat interfeys to'g'ri ishlasa suzuvchi klaviatura bilan true qo'ying. iPhone uchun bu xususiyat e'tiborga olinmaydi — klaviatura doimo pastki chetiga bog'langan.

UIScrollView va klaviatura

UIScrollView — Apple Keyboard Avoidance uchun asos sifatida foydalanishni tavsiya qiladigan konteynerdir. Klaviatura paydo bo'lganda, scroll view o'zining contentInset.bottom qiymatini oshiradi, kontentni yuqoriga aylantirishga va faol maydonni ko'rinadigan qilishga imkon beradi.

Asosiy metod — scrollRectToVisible, scroll view-ni dasturiy ravishda shunday aylantiradiki, belgilangan to'rtburchak (faol matn maydoni) ko'rinadigan sohada bo'ladi. contentInset o'zgarishini scrollRectToVisible chaqiruvi bilan birlashtirib, maydon nafaqat yopilmaganligini, balki ko'rinadigan sohaning yuqori qismida joylashganligini kafolatlaysiz.

swift
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 bilan UIViewController uchun Apple klaviatura paydo bo'lganda contentInset-ni avtomatik tuzatadigan UITableViewController dan foydalanishni tavsiya qiladi. Agar qo'shilgan jadval bilan UIViewController dan foydalanayotgan bo'lsangiz, Keyboard Avoidance-ni qo'lda amalga oshirishingiz kerak bo'ladi — UITableViewController maxsus kontrollerlar uchun bu xatti-harakatni ta'minlamaydi.

Auto Layout va Keyboard Avoidance

Auto Layout animatsiyalarni dasturlashtirmasdan Keyboard Avoidance-ni amalga oshirish imkonini beradi — klaviatura bildirishnomasiga javoban ma'lum bir cheklovning faolligini (isActive) o'zgartirish yoki uning konstantasini yangilash kifoya.

Odatiy sxema: scroll view yoki kontentning pastki bo'shlig'i uchun IBOutlet NSLayoutConstraint yarating va keyboardWillShow ishlovchisida constraint.constant = keyboardHeight qo'ying, keyboardWillHide da esa 0 ga qaytaring. Silliq o'tish uchun animate bloki ichida layoutIfNeeded orqali layout-ni yangilang.

YondashuviOS versiyasiMurakkablikTavsiya
Keyboard NotificationsiOS 3.0+O'rtachaEski versiyalarni qo'llab-quvvatlash uchun
UIScrollView + contentInsetiOS 2.0+PastUniversal usul, Apple tavsiya qiladi
Keyboard Layout GuideiOS 15+MinimalZamonaviy usul (iOS 15+)
IQKeyboardManageriOS 8.0+NolTez yechim, mashhur kutubxona

UIStackView dan foydalanganda, pastki bo'shliq cheklovlarini o'zgartirish ham ishlaydi: stack view barcha bolalar elementlarini avtomatik qayta taqsimlaydi. Biroq, agar stack view UIScrollView ichida bo'lsa, uning ichidagi cheklovlarni emas, balki scroll view ning o'zining contentInset-ni boshqarish afzalroqdir.

Keyboard Avoidance uchun uchinchi tomon yechimlari

IQKeyboardManager — kontrollerda bir satr kod bo'lmasdan avtomatik Keyboard Avoidance-ni amalga oshiradigan eng mashhur kutubxona (GitHub da 16 000 dan ortiq yulduz). U matn maydonlarini kuzatish uchun method swizzling dan foydalanadi va klaviatura paydo bo'lganda kontentni avtomatik ko'taradi.

Kutubxona moslashuvchan sozlamalarni taqdim etadi: maydon va klaviatura orasidagi masofani belgilash, alohida kontrollerlar uchun yoqish/o'chirish, UITextView va maxsus kiritish ko'rinishlari uchun xatti-harakatni sozlash mumkin. Biroq, method swizzling boshqa kutubxonalar bilan ziddiyatga kelishi mumkin va Apple kutilmagan yon ta'sirlar tufayli bu yondashuvni ishlab chiqarish kodi uchun tavsiya etmaydi.

Muqobillarga TPKeyboardAvoiding (engil kutubxona, ~2000 yulduz) va jamoatchilik tomonidan KeyboardManager kiradi. Zamonaviy loyihalar uchun Apple iOS 15+ ning o'rnatilgan vositalaridan, pastroq minimal versiyaga ega loyihalar uchun esa contentInset bilan UIScrollView dan foydalanishni tavsiya qiladi, bu eng ishonchli o'rnatilgan yechimdir.

Ko'p beriladigan savollar

iOS da Keyboard Avoidance nima?

Keyboard Avoidance — klaviatura paydo bo'lganda faol matn maydoni ko'rinib turishi uchun interfeysni siljitish texnikasidir. Layout-ni avtomatik moslashtirish uchun UIScrollView, Keyboard Notifications yoki iOS 15+ da Keyboard Layout Guide orqali amalga oshiriladi.

UIScrollView siz Keyboard Avoidance-ni qanday amalga oshirish mumkin?

Klaviatura paydo bo'lganda asosiy view ning frame-ini o'zgartirib, uning balandligini klaviatura balandligiga kamaytirish mumkin. Bildirishnomaning userInfo parametrlari bilan animatsiya blokida frame-ni yangilash uchun UIKeyboardWillShowNotification va UIKeyboardWillHideNotification dan foydalaning.

keyboardLayoutGuide qanday ishlaydi?

keyboardLayoutGuide — UIScrollView ga (iOS 15+) qo'shiladigan UILayoutGuide. U klaviaturaning yuqori chetini avtomatik kuzatadi va paydo bo'lganda va yashiringanda NSLayoutConstraint cheklovlarini yangilaydi, animatsiyani tizim klaviaturasi bilan sinxronlashtiradi.

Keyboard Avoidance uchun qanday uchinchi tomon kutubxonalari mavjud?

IQKeyboardManager — eng mashhur, kod talab qilmaydi. TPKeyboardAvoiding — engil muqobil. Yangi loyihalar uchun iOS 15+ ning o'rnatilgan vositalari afzalroq, chunki uchinchi tomon kutubxonalari Apple tavsiya qilmaydigan method swizzling dan foydalanadi.

Muayyan ekran uchun Keyboard Avoidance-ni qanday o'chirish mumkin?

IQKeyboardManager dan foydalansangiz, ma'lum bir UIViewController uchun enabled = false ni chaqiring. Qo'lda amalga oshirish uchun shunchaki ushbu ekranda klaviatura bildirishnomalariga obuna bo'lmang yoki klaviatura paydo bo'lganda contentInset-ni nolga qaytaring.

Xulosa

  • Keyboard Avoidance — matn kiritadigan iOS ilovalari uchun majburiy texnika, maydonlarning klaviatura bilan yopilishining oldini oladi.
  • UIKeyboardWillShowNotification va UIKeyboardWillHideNotification — kontent siljishini qo'lda boshqarish uchun klassik API.
  • UIScrollView contentInset va scrollRectToVisible bilan — Apple tomonidan tavsiya etiladigan universal yechim.
  • Keyboard Layout Guide (iOS 15+) — qo'lda bildirishnomalarsiz Auto Layout dan foydalanadigan zamonaviy usul.
  • Auto Layout cheklovlari animatsiya blokida constant yangilanishi bilan silliq o'tishni ta'minlaydi.
  • IQKeyboardManager — tez joriy qilish uchun mashhur uchinchi tomon kutubxonasi, lekin method swizzling cheklovlari bilan.
  • Apple tavsiya qiladi iOS 15+ loyihalari uchun keyboardLayoutGuide bilan UIScrollView, eski versiyalar uchun contentInset.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing