Keyboard Avoidance — mahiyyəti, tətbiq üsulları və interfeysin yerdəyişməsi

Müəllif: IT Sectr Dərc olunub: 2026-07-09 Oxuma vaxtı: 9 dəq

Keyboard Avoidance — bu, sistem klaviaturası göründükdə mətn sahələrini və digər interaktiv elementləri örtə bilən iOS tətbiqi interfeysinin uyğunlaşdırılması texnikasıdır. Bu mexanizm olmadan istifadəçi nə yazdığını fiziki olaraq görmür, bu da səhvlərə və istifadə təcrübəsinin pisləşməsinə səbəb olur. Apple Developer Documentation (2026)-ya görə, iOS 15-dən etibarən məzmunun yerdəyişməsini avtomatik idarə etmək üçün UIScrollView-in UIScrollView.keyboardLayoutGuide ilə birlikdə istifadə edilməsi tövsiyə olunur.

Əsas məqamlar

  • Keyboard Avoidance — aktiv mətn sahəsinin görünməsi üçün klaviatura göründükdə məzmunun yuxarı sürüşdürülməsi.
  • UIKeyboardWillShowNotification və UIKeyboardWillHideNotification layout-u uyğunlaşdırmaq üçün klaviaturanın ölçüsünü və animasiyasını təmin edir.
  • UIScrollView.keyboardLayoutGuide (iOS 15+) klaviatura görünəndə və gizlənəndə avtomatik olaraq boşluqları idarə edir.
  • IQKeyboardManager — əl ilə kod yazmadan avtomatik Keyboard Avoidance üçün məşhur üçüncü tərəf kitabxanası.
  • UITextFieldDelegate yerdəyişməni dəqiq idarə etmək üçün redaktənin başlanğıcını və sonunu izləməyə imkan verir.

Keyboard Avoidance nədir

Keyboard Avoidance — iOS-da sistem klaviaturası göründükdə aktiv daxiletmə sahəsinin görünməsini təmin edən texnikalar toplusudur. Əsas problem: klaviatura ekranın 50%-ə qədərini tutur və interfeysin aşağı yarısını, o cümlədən mətn sahələrini, göndərmə düymələrini və digər elementləri örtür.

Tətbiqin üç əsas yanaşması var: Keyboard Notifications vasitəsilə əl ilə idarəetmə (klassik üsul, iOS 3.0-dan işləyir), avtomatik sürüşdürmə ilə UIScrollView istifadəsi (Apple tərəfindən tövsiyə olunur) və Keyboard Layout Guide (iOS 15+-dan müasir üsul). Seçim minimum dəstəklənən iOS versiyasından və interfeysin mürəkkəbliyindən asılıdır.

Apple-a görə, Keyboard Avoidance-in olmaması, mətn sahələri klaviatura tərəfindən tamamilə örtüldükdə tətbiqlərin rədd edilməsinin ən çox yayılmış səbəblərindən biridir. App Store Təlimatları açıq şəkildə tələb edir ki, bütün interaktiv elementlər aktiv daxiletmə zamanı əlçatan qalsın.

Niyə iOS bunu avtomatik etmir

iOS hansı elementin görünməli olduğunu avtomatik müəyyən edə bilməz, çünki interfeysin semantikasını bilmir. Bir mətn sahəsi olan sadə formada bütün ekranı yuxarı itələmək kifayətdir. Xüsusi panelləri, üzən düymələri və çoxlu bölmələri olan mürəkkəb interfeysdə fərqli davranış məntiqi tələb olunur.

Bundan əlavə, bəzi tətbiqlər qəsdən məzmunu yerdəyişdirmir — məsələn, klaviatura kalkulyatorları və ya redaktorlar, burada klaviatura iş sahəsinin bir hissəsidir. iOS hər ssenari üçün çevik API-lər təqdim edərək qərarı tərtibatçıya buraxır.

Keyboard Frame Notifications

UIKeyboardWillShowNotification — iOS-un klaviatura görünməzdən əvvəl göndərdiyi əsas bildirişdir. UIResponder.keyboardFrameEndUserInfoKey lüğətində klaviaturanın son mövqeyi ilə CGRect, həmçinin UIResponder.keyboardAnimationDurationUserInfoKey-də animasiya müddətini ehtiva edir.

Bildirişin işləyicisi aktiv mətn sahəsi ilə klaviatura arasında üst-üstə düşməni hesablamalı, sonra konteynerin alt boşluğunu (contentInset və ya frame) dəyişdirməlidir. Sahə klaviaturanın yuxarı kənarından aşağıdadırsa, məzmun üst-üstə düşmə miqdarı qədər yuxarı sürüşdürülür. Klaviatura gizləndikdə boşluq orijinal dəyərinə qaytarılır.

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
}

Bildirişlərdən istifadə edərkən animasiyanı sistem klaviaturası ilə sinxronlaşdırmaq vacibdir. iOS animasiya əyrisini (UIResponder.keyboardAnimationCurveUserInfoKey) və müddəti ötürür. UIView.animate-i bu parametrlərlə istifadə edin ki, məzmun klaviatura ilə eyni vaxtda hamar şəkildə sürüşsün.

iOS 15+-da Keyboard Layout Guide

UIScrollView.keyboardLayoutGuide — iOS 15-də təqdim edilmiş Keyboard Avoidance üçün müasir API-dir. Klaviaturanın mövqeyini avtomatik izləyir və interfeysin aşağı hissəsini klaviaturanın yuxarı kənarı ilə birləşdirən Auto Layout məhdudiyyətlərini yeniləyir.

İstifadə üçün UIScrollView və ya UIStackView-də layout guide-i aktivləşdirmək və ona məzmunun alt məhdudiyyətini bağlamaq kifayətdir. Bildirişlər, hündürlüyün hesablanması və animasiya ilə heç bir əl işi tələb olunmur — sistem hər şeyi avtomatik edir, animasiyanı klaviaturanın görünməsi və gizlənməsi ilə sinxronlaşdırır.

swift
// Keyboard Layout Guide-ı aktivləşdirin (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true

// Alt məhdudiyyəti klaviaturanın yuxarısına bərkidin
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard — guide-in aşağı kənardan ayrıla bilən klaviaturaya (iPad-də) reaksiya verib-verməyəcəyini müəyyən edən xüsusiyyətdir. Yalnız interfeys düzgün işləyirsə üzən klaviatura ilə true qoyun. iPhone üçün bu xüsusiyyət nəzərə alınmır — klaviatura həmişə aşağı kənara bağlıdır.

UIScrollView və klaviatura

UIScrollView — Apple-ın Keyboard Avoidance üçün əsas kimi istifadə etməyi tövsiyə etdiyi konteynerdir. Klaviatura görünəndə scroll view öz contentInset.bottom-u artırır, məzmunu yuxarı sürüşdürməyə və aktiv sahəni görünən etməyə imkan verir.

Əsas metod — scrollRectToVisible, scroll view-i proqram olaraq elə sürüşdürür ki, göstərilən düzbucaqlı (aktiv mətn sahəsi) görünən sahədə olsun. contentInset dəyişikliyini scrollRectToVisible çağırışı ilə birləşdirərək, sahənin təkcə örtülmədiyinə deyil, həm də görünən sahənin yuxarı hissəsində yerləşdiyinə zəmanət verirsiniz.

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 ilə UIViewController üçün Apple klaviatura görünəndə contentInset-i avtomatik düzəldən UITableViewController-dan istifadə etməyi tövsiyə edir. Əgər əlavə edilmiş cədvəl ilə UIViewController istifadə edirsinizsə, Keyboard Avoidance-i əl ilə tətbiq etməli olacaqsınız — UITableViewController xüsusi kontrollerlər üçün bu davranışı təmin etmir.

Auto Layout və Keyboard Avoidance

Auto Layout animasiyaları proqramlaşdırmadan Keyboard Avoidance tətbiq etməyə imkan verir — klaviatura bildirişinə cavab olaraq müəyyən bir məhdudiyyətin aktivliyini (isActive) dəyişdirmək və ya onun sabitini yeniləmək kifayətdir.

Tipik sxem: scroll view və ya məzmunun alt boşluğu üçün IBOutlet NSLayoutConstraint yaradın və keyboardWillShot handler-də constraint.constant = keyboardHeight qoyun, keyboardWillHide-də isə 0-a sıfırlayın. Hamar keçid üçün animate bloku daxilində layoutIfNeeded vasitəsilə layout-u yeniləyin.

YanaşmaiOS versiyasıMürəkkəblikTövsiyə
Keyboard NotificationsiOS 3.0+OrtaKöhnə versiyaları dəstəkləmək üçün
UIScrollView + contentInsetiOS 2.0+AşağıUniversal üsul, Apple tövsiyə edir
Keyboard Layout GuideiOS 15+MinimalMüasir üsul (iOS 15+)
IQKeyboardManageriOS 8.0+SıfırSürətli həll, məşhur kitabxana

UIStackView istifadə edərkən, alt boşluq məhdudiyyətlərinin dəyişdirilməsi də işləyir: stack view uşaq elementləri avtomatik yenidən bölüşdürür. Lakin stack view UIScrollView-in içərisindədirsə, onun daxilindəki məhdudiyyətləri deyil, scroll view-in özünün contentInset-ini idarə etmək daha yaxşıdır.

Keyboard Avoidance üçün üçüncü tərəf həlləri

IQKeyboardManager — kontrollerdə bir sətir kod olmadan avtomatik Keyboard Avoidance tətbiq edən ən məşhur kitabxanadır (GitHub-da 16 000-dən çox ulduz). Mətn sahələrini izləmək üçün method swizzling-dən istifadə edir və klaviatura görünəndə məzmunu avtomatik qaldırır.

Kitabxana çevik parametrlər təqdim edir: sahə ilə klaviatura arasındakı məsafəni təyin etmək, ayrı-ayrı kontrollerlər üçün aktivləşdirmək/söndürmək, UITextView və xüsusi input view üçün davranışı konfiqurasiya etmək olar. Lakin method swizzling digər kitabxanalarla ziddiyyət təşkil edə bilər və Apple gözlənilməz yan təsirlərə görə bu yanaşmanı istehsal kodu üçün tövsiyə etmir.

Alternativlərə TPKeyboardAvoiding (yüngül kitabxana, ~2000 ulduz) və icma tərəfindən KeyboardManager daxildir. Müasir layihələr üçün Apple iOS 15+-un daxili alətlərindən, daha aşağı minimum versiyası olan layihələr üçün isə ən etibarlı daxili həll olan UIScrollView-dən contentInset ilə istifadə etməyi tövsiyə edir.

Tez-tez verilən suallar

iOS-da Keyboard Avoidance nədir?

Keyboard Avoidance — klaviatura görünəndə aktiv mətn sahəsinin görünməsi üçün interfeysi yerdəyişdirmə texnikasıdır. Layout-un avtomatik uyğunlaşdırılması üçün UIScrollView, Keyboard Notifications və ya iOS 15+-da Keyboard Layout Guide vasitəsilə tətbiq edilir.

UIScrollView olmadan Keyboard Avoidance necə tətbiq edilir?

Klaviatura görünəndə əsas view-in frame-ini dəyişərək hündürlüyü klaviaturanın hündürlüyü qədər azaltmaq olar. Bildirişin userInfo parametrləri ilə animasiya blokunda frame-i yeniləmək üçün UIKeyboardWillShowNotification və UIKeyboardWillHideNotification istifadə edin.

keyboardLayoutGuide necə işləyir?

keyboardLayoutGuide — UIScrollView-ə (iOS 15+) əlavə edilən UILayoutGuide-dir. Klaviaturanın yuxarı kənarını avtomatik izləyir və görünəndə və gizlənəndə NSLayoutConstraint-lərini yeniləyir, animasiyanı sistem klaviaturası ilə sinxronlaşdırır.

Keyboard Avoidance üçün hansı üçüncü tərəf kitabxanaları var?

IQKeyboardManager — ən məşhur, kod tələb etmir. TPKeyboardAvoiding — yüngül alternativ. Yeni layihələr üçün iOS 15+-un daxili alətləri daha üstündür, çünki üçüncü tərəf kitabxanaları Apple-ın tövsiyə etmədiyi method swizzling-dən istifadə edir.

Müəyyən bir ekran üçün Keyboard Avoidance necə söndürülür?

IQKeyboardManager istifadə edirsinizsə, müəyyən UIViewController üçün enabled = false çağırın. Əl ilə tətbiq üçün sadəcə bu ekranda klaviatura bildirişlərinə abunə olmayın və ya klaviatura görünəndə contentInset-i sıfıra sıfırlayın.

Nəticə

  • Keyboard Avoidance — mətn daxiletməsi olan iOS tətbiqləri üçün məcburi texnika, sahələrin klaviatura ilə örtülməsinin qarşısını alır.
  • UIKeyboardWillShowNotification və UIKeyboardWillHideNotification — məzmunun yerdəyişməsini əl ilə idarə etmək üçün klassik API.
  • UIScrollView contentInset və scrollRectToVisible ilə — Apple tərəfindən tövsiyə edilən universal həll.
  • Keyboard Layout Guide (iOS 15+) — əl bildirişləri olmadan Auto Layout istifadə edən müasir üsul.
  • Auto Layout məhdudiyyətləri animasiya blokunda constant-ın yenilənməsi ilə hamar keçid təmin edir.
  • IQKeyboardManager — sürətli tətbiq üçün məşhur üçüncü tərəf kitabxanası, lakin method swizzling məhdudiyyətləri ilə.
  • Apple tövsiyə edir iOS 15+ layihələri üçün keyboardLayoutGuide ilə UIScrollView, köhnə versiyalar üçün isə contentInset.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun