Keyboard Avoidance — суштина, начини имплементације и померање интерфејса

Аутор: IT Sectr Објављено: 2026-07-09 Време читања: 9 мин

Keyboard Avoidance — је техника прилагођавања интерфејса iOS апликације при појави системске тастатуре, која може прекрити текстуална поља и друге интерактивне елементе. Без имплементације овог механизма, корисник физички не види шта уноси, што доводи до грешака и погоршања корисничког искуства. Према Apple Developer Documentation (2026), од iOS 15 препоручује се коришћење UIScrollView у комбинацији са UIScrollView.keyboardLayoutGuide за аутоматско управљање померањем садржаја.

Главне тачке

  • Keyboard Avoidance — померање садржаја нагоре при појави тастатуре, како активно текстуално поље остало видљиво.
  • UIKeyboardWillShowNotification и UIKeyboardWillHideNotification пружају величину и анимацију тастатуре за прилагођавање layout-а.
  • UIScrollView.keyboardLayoutGuide (iOS 15+) аутоматски управља размацима при појави и скривању тастатуре.
  • IQKeyboardManager — популарна библиотека треће стране за аутоматско Keyboard Avoidance без ручног кода.
  • UITextFieldDelegate омогућава праћење почетка и краја уређивања за прецизно управљање померањем.

Шта је Keyboard Avoidance

Keyboard Avoidance — је скуп техника које обезбеђују видљивост активног поља за унос при појави системске тастатуре на iOS-у. Основни проблем: тастатура заузима до 50% екрана и прекрива доњу половину интерфејса, укључујући текстуална поља, дугмад за слање и друге елементе.

Постоје три главна приступа имплементацији: ручно управљање путем Keyboard Notifications (класични метод, ради од iOS 3.0), коришћење UIScrollView са аутоматским скроловањем (препоручује Apple) и Keyboard Layout Guide (модерни метод од iOS 15+). Избор зависи од минималне подржане верзије iOS-а и сложености интерфејса.

Према Apple-у, недостатак Keyboard Avoidance-а је један од најчешћих разлога одбијања апликација при прегледу, ако су текстуална поља потпуно прекривена тастатуром. App Store смернице изричито захтевају да сви интерактивни елементи остану доступни током активног уноса.

Зашто iOS не ради ово аутоматски

iOS не може аутоматски да одреди који елемент треба да остане видљив, јер не познаје семантику интерфејса. У једноставној форми са једним текстуалним пољем довољно је померити цео екран. У сложеном интерфејсу са прилагођеним панелима, плутајућим дугмадима и више секција потребна је различита логика понашања.

Поред тога, неке апликације намерно не померају садржај — на пример, тастатурни калкулатори или едитори где је тастатура део радног простора. iOS оставља одлуку програмеру, пружајући флексибилне API-је за сваки сценарио.

Keyboard Frame Notifications

UIKeyboardWillShowNotification — основно обавештење које iOS шаље пре појаве тастатуре. Садржи CGRect са коначном позицијом тастатуре у речнику UIResponder.keyboardFrameEndUserInfoKey, као и трајање анимације у UIResponder.keyboardAnimationDurationUserInfoKey.

Руковалац обавештења треба да израчуна преклапање између активног текстуалног поља и тастатуре, затим да промени доњу маргину (contentInset или frame) контејнера. Ако се поље налази испод горње ивице тастатуре, садржај се помера нагоре за износ преклапања. При скривању тастатуре, маргина се враћа на првобитну вредност.

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
}

При коришћењу обавештења, важно је синхронизовати анимацију са системском тастатуром. iOS преноси криву анимације (UIResponder.keyboardAnimationCurveUserInfoKey) и трајање. Користите UIView.animate са овим параметрима како би се садржај померао глатко, истовремено са појавом тастатуре.

Keyboard Layout Guide у iOS 15+

UIScrollView.keyboardLayoutGuide — је модеран API за Keyboard Avoidance, представљен у iOS 15. Аутоматски прати позицију тастатуре и ажурира Auto Layout ограничења која повезују доњи део интерфејса са горњом ивицом тастатуре.

За коришћење, довољно је активирати layout guide у UIScrollView или UIStackView и закачити доње ограничење садржаја за њега. Никакав ручни рад са обавештењима, израчунавањем висине и анимацијом није потребан — систем ради све аутоматски, синхронизујући анимацију са појавом и скривањем тастатуре.

swift
// Омогућите Keyboard Layout Guide (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true

// Закачите доње ограничење за врх тастатуре
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard — својство које одређује да ли guide треба да реагује на тастатуру која може бити одвојена од доње ивице (на iPad-у). Поставите true само ако интерфејс исправно ради са плутајућом тастатуром. За iPhone ово својство се игнорише — тастатура је увек причвршћена за доњу ивицу.

UIScrollView и тастатура

UIScrollView — је контејнер који Apple препоручује као основу за Keyboard Avoidance. Када се тастатура појави, scroll view повећава свој contentInset.bottom, омогућавајући скроловање садржаја нагоре и чинећи активно поље видљивим.

Кључни метод — scrollRectToVisible, који програмски скролује scroll view тако да се наведени правоугаоник (активно текстуално поље) нађе у видљивом подручју. Комбиновањем промене contentInset-а са позивом scrollRectToVisible, гарантујете да поље не само да није прекривено, већ се налази у горњем делу видљивог подручја.

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

За UIViewController са UITableView, Apple препоручује коришћење UITableViewController-а, који аутоматски прилагођава contentInset при појави тастатуре. Ако користите UIViewController са додатом табелом, мораћете ручно да имплементирате Keyboard Avoidance — UITableViewController не пружа ово понашање за прилагођене контролере.

Auto Layout и Keyboard Avoidance

Auto Layout омогућава имплементацију Keyboard Avoidance-а без програмирања анимација — довољно је променити активност (isActive) одређеног ограничења или ажурирати његову константу као одговор на обавештење тастатуре.

Типична шема: креирајте IBOutlet NSLayoutConstraint за доњу маргину scroll view-а или садржаја, и у руковаоцу keyboardWillShow поставите constraint.constant = keyboardHeight, а у keyboardWillHide ресетујте на 0. Ажурирајте layout кроз layoutIfNeeded унутар animate блока за глатку транзицију.

ПриступiOS верзијаСложеностПрепорука
Keyboard NotificationsiOS 3.0+СредњаЗа подршку старих верзија
UIScrollView + contentInsetiOS 2.0+НискаУниверзални метод, Apple препоручује
Keyboard Layout GuideiOS 15+МинималнаМодерни метод (iOS 15+)
IQKeyboardManageriOS 8.0+НултаБрзо решење, популарна библиотека

При коришћењу UIStackView, промене ограничења доње маргине такође раде: stack view аутоматски прерасподељује дочерње елементе. Међутим, ако се stack view налази унутар UIScrollView-а, пожељније је управљати contentInset самог scroll view-а, а не ограничењима унутар њега.

Решења треће стране за Keyboard Avoidance

IQKeyboardManager — најпопуларнија библиотека (преко 16.000 звездица на GitHub-у) која имплементира аутоматско Keyboard Avoidance без иједне линије кода у контролеру. Користи method swizzling за праћење текстуалних поља и аутоматски подиже садржај при појави тастатуре.

Библиотека пружа флексибилна подешавања: можете одредити растојање између поља и тастатуре, укључити/искључити за појединачне контролере, конфигурисати понашање за UITextView и прилагођене приказе уноса. Међутим, method swizzling може бити у конфликту са другим библиотекама, а Apple не препоручује овај приступ за продукцијски код због непредвидивих нуспојава.

Алтернативе укључују TPKeyboardAvoiding (лака библиотека, ~2000 звездица) и KeyboardManager из заједнице. За модерне пројекте, Apple препоручује коришћење уграђених алата iOS 15+, а за пројекте са нижом минималном верзијом — UIScrollView са contentInset, који је најпоузданије уграђено решење.

Често постављана питања

Шта је Keyboard Avoidance у iOS-у?

Keyboard Avoidance — је техника померања интерфејса при појави тастатуре, како активно текстуално поље остало видљиво. Имплементира се кроз UIScrollView, Keyboard Notifications или Keyboard Layout Guide iOS 15+ за аутоматско прилагођавање layout-а.

Како имплементирати Keyboard Avoidance без UIScrollView-а?

Може се променити frame главног view-а при појави тастатуре, смањујући његову висину за висину тастатуре. Користите UIKeyboardWillShowNotification и UIKeyboardWillHideNotification за ажурирање frame-а у блоку анимације са параметрима из userInfo обавештења.

Како функционише keyboardLayoutGuide?

keyboardLayoutGuide — је UILayoutGuide који се додаје на UIScrollView (iOS 15+). Аутоматски прати горњу ивицу тастатуре и ажурира своја NSLayoutConstraint ограничења при њеној појави и скривању, синхронизујући анимацију са системском тастатуром.

Које су библиотеке треће стране за Keyboard Avoidance?

IQKeyboardManager — најпопуларнија, не захтева код. TPKeyboardAvoiding — лака алтернатива. За нове пројекте пожељнији су уграђени алати iOS 15+, јер библиотеке треће стране користе method swizzling, који Apple не препоручује.

Како онемогућити Keyboard Avoidance за одређени екран?

Ако користите IQKeyboardManager, позовите enabled = false за одређени UIViewController. За ручну имплементацију, једноставно не претплаћујте се на обавештења тастатуре на том екрану или ресетујте contentInset на нулу при појави тастатуре.

Резиме

  • Keyboard Avoidance — обавезна техника за iOS апликације са текстуалним уносом, спречава прекривање поља тастатуром.
  • UIKeyboardWillShowNotification и UIKeyboardWillHideNotification — класичан API за ручно управљање померањем садржаја.
  • UIScrollView са contentInset и scrollRectToVisible — универзално решење које Apple препоручује.
  • Keyboard Layout Guide (iOS 15+) — модеран метод без ручних обавештења, који користи Auto Layout.
  • Auto Layout ограничења са ажурирањем константе у анимационом блоку обезбеђују глатку транзицију садржаја.
  • IQKeyboardManager — популарна библиотека треће стране за брзу имплементацију, али са ограничењима method swizzling-а.
  • Apple препоручује UIScrollView са keyboardLayoutGuide за пројекте са iOS 15+ и contentInset за пројекте са старијим верзијама.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође