Keyboard Avoidance — esența, metodele de implementare și deplasarea interfeței

Autor: IT Sectr Publicat: 2026-07-09 Timp de citire: 9 min

Keyboard Avoidance — este o tehnică de adaptare a interfeței aplicației iOS la apariția tastaturii sistemului, care poate acoperi câmpurile text și alte elemente interactive. Fără implementarea acestui mecanism, utilizatorul nu vede fizic ce introduce, ceea ce duce la erori și deteriorarea experienței de utilizare. Conform Apple Developer Documentation (2026), începând cu iOS 15 se recomandă utilizarea UIScrollView în combinație cu UIScrollView.keyboardLayoutGuide pentru gestionarea automată a deplasării conținutului.

Principalele puncte

  • Keyboard Avoidance — deplasarea conținutului în sus la apariția tastaturii, astfel încât câmpul text activ să rămână vizibil.
  • UIKeyboardWillShowNotification și UIKeyboardWillHideNotification oferă dimensiunea și animația tastaturii pentru adaptarea layout-ului.
  • UIScrollView.keyboardLayoutGuide (iOS 15+) gestionează automat marginile la apariția și ascunderea tastaturii.
  • IQKeyboardManager — o bibliotecă terță populară pentru Keyboard Avoidance automat fără cod manual.
  • UITextFieldDelegate permite urmărirea începutului și sfârșitului editării pentru gestionarea precisă a deplasării.

Ce este Keyboard Avoidance

Keyboard Avoidance — este un set de tehnici care asigură vizibilitatea câmpului de introducere activ la apariția tastaturii sistemului pe iOS. Problema de bază: tastatura ocupă până la 50% din ecran și acoperă jumătatea inferioară a interfeței, inclusiv câmpurile text, butoanele de trimitere și alte elemente.

Există trei abordări principale de implementare: gestionarea manuală prin Keyboard Notifications (metodă clasică, funcționează din iOS 3.0), utilizarea UIScrollView cu derulare automată (recomandată de Apple) și Keyboard Layout Guide (metodă modernă din iOS 15+). Alegerea depinde de versiunea minimă suportată de iOS și de complexitatea interfeței.

Potrivit Apple, lipsa Keyboard Avoidance este una dintre cele mai frecvente cauze de respingere a aplicațiilor la revizuire, dacă câmpurile text sunt complet acoperite de tastatură. Ghidurile App Store cer în mod explicit ca toate elementele interactive să rămână accesibile în timpul introducerii active.

De ce iOS nu face acest lucru automat

iOS nu poate determina automat care element ar trebui să rămână vizibil, deoarece nu cunoaște semantica interfeței. Într-un formular simplu cu un singur câmp text, este suficient să deplasați întregul ecran. Într-o interfață complexă cu panouri personalizate, butoane plutitoare și mai multe secțiuni, este necesară o logică de comportament diferită.

În plus, unele aplicații nu deplasează intenționat conținutul — de exemplu, calculatoarele cu tastatură sau editorii în care tastatura face parte din zona de lucru. iOS lasă decizia dezvoltatorului, oferind API-uri flexibile pentru orice scenariu.

Keyboard Frame Notifications

UIKeyboardWillShowNotification — notificarea principală pe care iOS o trimite înainte de apariția tastaturii. Conține CGRect cu poziția finală a tastaturii în dicționarul UIResponder.keyboardFrameEndUserInfoKey, precum și durata animației în UIResponder.keyboardAnimationDurationUserInfoKey.

Handler-ul notificării trebuie să calculeze suprapunerea dintre câmpul text activ și tastatură, apoi să modifice marginea inferioară (contentInset sau frame) a containerului. Dacă câmpul se află sub marginea superioară a tastaturii, conținutul se deplasează în sus cu valoarea suprapunerii. La ascunderea tastaturii, marginea revine la valoarea inițială.

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
}

La utilizarea notificărilor, este important să sincronizați animația cu tastatura sistemului. iOS transmite curba de animație (UIResponder.keyboardAnimationCurveUserInfoKey) și durata. Utilizați UIView.animate cu acești parametri pentru ca conținutul să se deplaseze lin, simultan cu apariția tastaturii.

Keyboard Layout Guide în iOS 15+

UIScrollView.keyboardLayoutGuide — este un API modern pentru Keyboard Avoidance, introdus în iOS 15. Urmărește automat poziția tastaturii și actualizează constrângerile Auto Layout care leagă partea inferioară a interfeței de marginea superioară a tastaturii.

Pentru utilizare, este suficient să activați layout guide în UIScrollView sau UIStackView și să legați constrângerea inferioară a conținutului de acesta. Nicio muncă manuală cu notificări, calcularea înălțimii și animație nu este necesară — sistemul face totul automat, sincronizând animația cu apariția și ascunderea tastaturii.

swift
// Activați Keyboard Layout Guide (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true

// Fixați constrângerea inferioară la partea de sus a tastaturii
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard — proprietatea care determină dacă ghidul trebuie să reacționeze la tastatura care poate fi deconectată de la marginea inferioară (pe iPad). Setați true doar dacă interfața funcționează corect cu tastatura plutitoare. Pentru iPhone, această proprietate este ignorată — tastatura este întotdeauna atașată de marginea inferioară.

UIScrollView și tastatura

UIScrollView — este un container pe care Apple îl recomandă ca bază pentru Keyboard Avoidance. Când tastatura apare, scroll view își mărește contentInset.bottom, permițând derularea conținutului în sus și făcând câmpul activ vizibil.

Metoda cheie — scrollRectToVisible, care derulează programatic scroll view-ul astfel încât dreptunghiul specificat (câmpul text activ) să se afle în zona vizibilă. Combinând modificarea contentInset cu apelarea scrollRectToVisible, garantați că câmpul nu este doar neacoperit, ci se află în partea superioară a zonei vizibile.

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
        )
    }
}

Pentru UIViewController cu UITableView, Apple recomandă utilizarea UITableViewController, care ajustează automat contentInset la apariția tastaturii. Dacă utilizați UIViewController cu un tabel adăugat, va trebui să implementați Keyboard Avoidance manual — UITableViewController nu oferă acest comportament pentru controlere personalizate.

Auto Layout și Keyboard Avoidance

Auto Layout permite implementarea Keyboard Avoidance fără programarea animațiilor — este suficient să schimbați activitatea (isActive) unei anumite constrângeri sau să actualizați constanta acesteia ca răspuns la notificarea tastaturii.

Schema tipică: creați un IBOutlet NSLayoutConstraint pentru marginea inferioară a scroll view-ului sau conținutului, iar în handler-ul keyboardWillShow setați constraint.constant = keyboardHeight, iar în keyboardWillHide resetați la 0. Actualizați layout-ul prin layoutIfNeeded în interiorul blocului animate pentru o tranziție lină.

AbordareVersiune iOSComplexitateRecomandare
Keyboard NotificationsiOS 3.0+MediePentru suportul versiunilor vechi
UIScrollView + contentInsetiOS 2.0+ScăzutăMetodă universală, Apple recomandă
Keyboard Layout GuideiOS 15+MinimăMetodă modernă (iOS 15+)
IQKeyboardManageriOS 8.0+ZeroSoluție rapidă, bibliotecă populară

La utilizarea UIStackView, modificările constrângerilor marginii inferioare funcționează de asemenea: stack view redistribuie automat elementele copil. Cu toate acestea, dacă stack view se află în interiorul unui UIScrollView, este preferabil să gestionați contentInset al scroll view-ului însuși, nu constrângerile din interiorul acestuia.

Soluții terțe pentru Keyboard Avoidance

IQKeyboardManager — cea mai populară bibliotecă (peste 16.000 de stele pe GitHub) care implementează Keyboard Avoidance automat fără o singură linie de cod în controler. Utilizează method swizzling pentru urmărirea câmpurilor text și ridică automat conținutul la apariția tastaturii.

Biblioteca oferă setări flexibile: puteți specifica distanța dintre câmp și tastatură, activa/dezactiva pentru controlere individuale, configura comportamentul pentru UITextView și input view-uri personalizate. Cu toate acestea, method swizzling poate intra în conflict cu alte biblioteci, iar Apple nu recomandă această abordare pentru codul de producție din cauza efectelor secundare imprevizibile.

Alternativele includ TPKeyboardAvoiding (bibliotecă ușoară, ~2000 de stele) și KeyboardManager din comunitate. Pentru proiecte moderne, Apple recomandă utilizarea instrumentelor încorporate iOS 15+, iar pentru proiecte cu o versiune minimă mai mică — UIScrollView cu contentInset, care este cea mai fiabilă soluție încorporată.

Întrebări frecvente

Ce este Keyboard Avoidance în iOS?

Keyboard Avoidance — este o tehnică de deplasare a interfeței la apariția tastaturii, astfel încât câmpul text activ să rămână vizibil. Se implementează prin UIScrollView, Keyboard Notifications sau Keyboard Layout Guide iOS 15+ pentru adaptarea automată a layout-ului.

Cum se implementează Keyboard Avoidance fără UIScrollView?

Se poate modifica frame-ul view-ului principal la apariția tastaturii, reducând înălțimea acestuia cu înălțimea tastaturii. Utilizați UIKeyboardWillShowNotification și UIKeyboardWillHideNotification pentru a actualiza frame-ul în blocul de animație cu parametrii din userInfo al notificării.

Cum funcționează keyboardLayoutGuide?

keyboardLayoutGuide — este un UILayoutGuide care se adaugă la UIScrollView (iOS 15+). Urmărește automat marginea superioară a tastaturii și își actualizează NSLayoutConstraint-urile la apariția și ascunderea acesteia, sincronizând animația cu tastatura sistemului.

Care sunt bibliotecile terțe pentru Keyboard Avoidance?

IQKeyboardManager — cea mai populară, nu necesită cod. TPKeyboardAvoiding — o alternativă ușoară. Pentru proiecte noi, instrumentele încorporate iOS 15+ sunt preferabile, deoarece bibliotecile terțe folosesc method swizzling, pe care Apple nu îl recomandă.

Cum se dezactivează Keyboard Avoidance pentru un ecran specific?

Dacă utilizați IQKeyboardManager, apelați enabled = false pentru UIViewController-ul specific. Pentru implementarea manuală, pur și simplu nu vă abonați la notificările tastaturii pe acest ecran sau resetați contentInset la zero la apariția tastaturii.

Rezumat

  • Keyboard Avoidance — tehnică obligatorie pentru aplicațiile iOS cu introducere text, care previne acoperirea câmpurilor de tastatură.
  • UIKeyboardWillShowNotification și UIKeyboardWillHideNotification — API clasic pentru gestionarea manuală a deplasării conținutului.
  • UIScrollView cu contentInset și scrollRectToVisible — soluție universală recomandată de Apple.
  • Keyboard Layout Guide (iOS 15+) — metodă modernă fără notificări manuale, care utilizează Auto Layout.
  • Constrângerile Auto Layout cu actualizarea constantei în blocul de animație asigură o tranziție lină a conținutului.
  • IQKeyboardManager — bibliotecă terță populară pentru implementare rapidă, dar cu limitările method swizzling.
  • Apple recomandă UIScrollView cu keyboardLayoutGuide pentru proiecte cu iOS 15+ și contentInset pentru proiecte cu versiuni mai vechi.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și