Keyboard Avoidance — podstata, způsoby implementace a posun rozhraní

Autor: IT Sectr Publikováno: 2026-07-09 Doba čtení: 9 min

Keyboard Avoidance — je technika přizpůsobení rozhraní iOS aplikace při zobrazení systémové klávesnice, která může překrýt textová pole a další interaktivní prvky. Bez implementace tohoto mechanismu uživatel fyzicky nevidí, co zadává, což vede k chybám a zhoršení uživatelského zážitku. Podle Apple Developer Documentation (2026) se od iOS 15 doporučuje používat UIScrollView v kombinaci s UIScrollView.keyboardLayoutGuide pro automatické řízení posunu obsahu.

Hlavní body

  • Keyboard Avoidance — posun obsahu nahoru při zobrazení klávesnice, aby aktivní textové pole zůstalo viditelné.
  • UIKeyboardWillShowNotification a UIKeyboardWillHideNotification poskytují velikost a animaci klávesnice pro přizpůsobení rozvržení.
  • UIScrollView.keyboardLayoutGuide (iOS 15+) automaticky spravuje okraje při zobrazení a skrytí klávesnice.
  • IQKeyboardManager — populární knihovna třetí strany pro automatické Keyboard Avoidance bez ručního kódu.
  • UITextFieldDelegate umožňuje sledovat začátek a konec úprav pro přesné řízení posunu.

Co je Keyboard Avoidance

Keyboard Avoidance — je soubor technik zajišťujících viditelnost aktivního vstupního pole při zobrazení systémové klávesnice na iOS. Základní problém: klávesnice zabírá až 50 % obrazovky a překrývá spodní polovinu rozhraní, včetně textových polí, tlačítek odeslání a dalších prvků.

Existují tři hlavní přístupy k implementaci: ruční správa prostřednictvím Keyboard Notifications (klasická metoda, funguje od iOS 3.0), použití UIScrollView s automatickým posouváním (doporučeno Apple) a Keyboard Layout Guide (moderní metoda od iOS 15+). Volba závisí na minimální podporované verzi iOS a složitosti rozhraní.

Podle Apple je absence Keyboard Avoidance jedním z nejčastějších důvodů zamítnutí aplikací při recenzi, pokud jsou textová pole zcela zakryta klávesnicí. Pokyny App Store výslovně vyžadují, aby všechny interaktivní prvky zůstaly přístupné během aktivního zadávání.

Proč to iOS nedělá automaticky

iOS nemůže automaticky určit, který prvek by měl zůstat viditelný, protože nezná sémantiku rozhraní. V jednoduchém formuláři s jedním textovým polem stačí posunout celou obrazovku. Ve složitém rozhraní s vlastními panely, plovoucími tlačítky a více sekcemi je vyžadována jiná logika chování.

Kromě toho některé aplikace záměrně neposouvají obsah — například kalkulačky s klávesnicí nebo editory, kde je klávesnice součástí pracovní oblasti. Apple ponechává rozhodnutí na vývojáři a poskytuje flexibilní API pro každý scénář.

Keyboard Frame Notifications

UIKeyboardWillShowNotification — hlavní oznámení, které iOS odesílá před zobrazením klávesnice. Obsahuje CGRect s konečnou polohou klávesnice ve slovníku UIResponder.keyboardFrameEndUserInfoKey a také dobu trvání animace v UIResponder.keyboardAnimationDurationUserInfoKey.

Obslužná rutina oznámení musí vypočítat překrytí mezi aktivním textovým polem a klávesnicí, poté změnit spodní okraj (contentInset nebo frame) kontejneru. Pokud je pole pod horním okrajem klávesnice, obsah se posune nahoru o hodnotu překrytí. Při skrytí klávesnice se okraj vrátí na původní hodnotu.

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
}

Při používání oznámení je důležité synchronizovat animaci se systémovou klávesnicí. iOS předává křivku animace (UIResponder.keyboardAnimationCurveUserInfoKey) a dobu trvání. Použijte UIView.animate s těmito parametry, aby se obsah posouval plynule, současně se zobrazením klávesnice.

Keyboard Layout Guide v iOS 15+

UIScrollView.keyboardLayoutGuide — je moderní API pro Keyboard Avoidance, představené v iOS 15. Automaticky sleduje polohu klávesnice a aktualizuje omezení Auto Layout, která spojují spodní část rozhraní s horním okrajem klávesnice.

Pro použití stačí aktivovat layout guide v UIScrollView nebo UIStackView a připojit k němu spodní omezení obsahu. Žádná ruční práce s oznámeními, výpočtem výšky a animací není vyžadována — systém dělá vše automaticky, synchronizuje animaci se zobrazením a skrytím klávesnice.

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

// Připojit spodní omezení k horní části klávesnice
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard — vlastnost, která určuje, zda má guide reagovat na klávesnici, která může být odpojena od spodního okraje (na iPadu). Nastavte na true pouze pokud rozhraní funguje správně s plovoucí klávesnicí. Pro iPhone je tato vlastnost ignorována — klávesnice je vždy připevněna ke spodnímu okraji.

UIScrollView a klávesnice

UIScrollView — je kontejner, který Apple doporučuje jako základ pro Keyboard Avoidance. Když se klávesnice objeví, scroll view zvýší svůj contentInset.bottom, což umožní posunout obsah nahoru a zpřístupnit aktivní pole.

Klíčová metoda — scrollRectToVisible, která programově posouvá scroll view tak, aby se zadaný obdélník (aktivní textové pole) nacházel ve viditelné oblasti. Kombinací změny contentInset s voláním scrollRectToVisible zaručíte, že pole není pouze nezakryté, ale nachází se v horní části viditelné oblasti.

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

Pro UIViewController s UITableView Apple doporučuje použití UITableViewController, který automaticky upravuje contentInset při zobrazení klávesnice. Pokud používáte UIViewController s přidanou tabulkou, musíte implementovat Keyboard Avoidance ručně — UITableViewController neposkytuje toto chování pro vlastní kontrolery.

Auto Layout a Keyboard Avoidance

Auto Layout umožňuje implementovat Keyboard Avoidance bez programování animací — stačí změnit aktivitu (isActive) určitého omezení nebo aktualizovat jeho konstantu jako odpověď na oznámení klávesnice.

Typické schéma: vytvořte IBOutlet NSLayoutConstraint pro spodní okraj scroll view nebo obsahu a v obsluze keyboardWillShow nastavte constraint.constant = keyboardHeight, a v keyboardWillHide resetujte na 0. Aktualizujte rozvržení pomocí layoutIfNeeded uvnitř bloku animate pro plynulý přechod.

PřístupVerze iOSSložitostDoporučení
Keyboard NotificationsiOS 3.0+StředníPro podporu starých verzí
UIScrollView + contentInsetiOS 2.0+NízkáUniverzální metoda, Apple doporučuje
Keyboard Layout GuideiOS 15+MinimálníModerní metoda (iOS 15+)
IQKeyboardManageriOS 8.0+NulováRychlé řešení, populární knihovna

Při použití UIStackView změny omezení spodního okraje také fungují: stack view automaticky přerozděluje podřízené prvky. Pokud se však stack view nachází uvnitř UIScrollView, je vhodnější spravovat contentInset samotného scroll view, nikoli omezení uvnitř něj.

Řešení třetích stran pro Keyboard Avoidance

IQKeyboardManager — nejoblíbenější knihovna (více než 16 000 hvězdiček na GitHubu), která implementuje automatické Keyboard Avoidance bez jediného řádku kódu v kontroleru. Používá method swizzling pro sledování textových polí a automaticky zvedá obsah při zobrazení klávesnice.

Knihovna poskytuje flexibilní nastavení: můžete určit vzdálenost mezi polem a klávesnicí, zapnout/vypnout pro jednotlivé kontrolery, nakonfigurovat chování pro UITextView a vlastní vstupní zobrazení. Method swizzling však může kolidovat s jinými knihovnami a Apple tento přístup nedoporučuje pro produkční kód kvůli nepředvídatelným vedlejším účinkům.

Alternativy zahrnují TPKeyboardAvoiding (odlehčená knihovna, ~2000 hvězdiček) a KeyboardManager od komunity. Pro moderní projekty Apple doporučuje používat vestavěné nástroje iOS 15+ a pro projekty s nižší minimální verzí — UIScrollView s contentInset, což je nejspolehlivější vestavěné řešení.

Často kladené otázky

Co je Keyboard Avoidance v iOS?

Keyboard Avoidance — je technika posunu rozhraní při zobrazení klávesnice, aby aktivní textové pole zůstalo viditelné. Implementuje se pomocí UIScrollView, Keyboard Notifications nebo Keyboard Layout Guide iOS 15+ pro automatické přizpůsobení rozvržení.

Jak implementovat Keyboard Avoidance bez UIScrollView?

Můžete změnit frame hlavního zobrazení při zobrazení klávesnice, zmenšením jeho výšky o výšku klávesnice. Použijte UIKeyboardWillShowNotification a UIKeyboardWillHideNotification k aktualizaci frame v bloku animace s parametry z userInfo oznámení.

Jak funguje keyboardLayoutGuide?

keyboardLayoutGuide — je UILayoutGuide, který se přidává k UIScrollView (iOS 15+). Automaticky sleduje horní okraj klávesnice a aktualizuje svá NSLayoutConstraint omezení při jejím zobrazení a skrytí, synchronizuje animaci se systémovou klávesnicí.

Jaké jsou knihovny třetích stran pro Keyboard Avoidance?

IQKeyboardManager — nejoblíbenější, nevyžaduje kód. TPKeyboardAvoiding — odlehčená alternativa. Pro nové projekty jsou preferovány vestavěné nástroje iOS 15+, protože knihovny třetích stran používají method swizzling, který Apple nedoporučuje.

Jak vypnout Keyboard Avoidance pro konkrétní obrazovku?

Pokud používáte IQKeyboardManager, zavolejte enabled = false pro konkrétní UIViewController. Pro ruční implementaci se jednoduše nepřihlaste k odběru oznámení klávesnice na této obrazovce nebo resetujte contentInset na nulu při zobrazení klávesnice.

Shrnutí

  • Keyboard Avoidance — povinná technika pro iOS aplikace s textovým vstupem, zabraňuje zakrytí polí klávesnicí.
  • UIKeyboardWillShowNotification a UIKeyboardWillHideNotification — klasické API pro ruční správu posunu obsahu.
  • UIScrollView s contentInset a scrollRectToVisible — univerzální řešení doporučené Apple.
  • Keyboard Layout Guide (iOS 15+) — moderní metoda bez ručních oznámení, využívající Auto Layout.
  • Omezení Auto Layout s aktualizací konstanty v bloku animace zajišťují plynulý přechod obsahu.
  • IQKeyboardManager — populární knihovna třetí strany pro rychlou implementaci, ale s omezeními method swizzling.
  • Apple doporučuje UIScrollView s keyboardLayoutGuide pro projekty s iOS 15+ a contentInset pro projekty se staršími verzemi.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také