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 — 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.
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.
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.
@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.
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.
// 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 — 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.
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 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şma | iOS versiyası | Mürəkkəblik | Tövsiyə |
|---|---|---|---|
| Keyboard Notifications | iOS 3.0+ | Orta | Köhnə versiyaları dəstəkləmək üçün |
| UIScrollView + contentInset | iOS 2.0+ | Aşağı | Universal üsul, Apple tövsiyə edir |
| Keyboard Layout Guide | iOS 15+ | Minimal | Müasir üsul (iOS 15+) |
| IQKeyboardManager | iOS 8.0+ | Sıfır | Sü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.
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
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.
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 — 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.
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.
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ə
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.
Həm də oxuyun