UIKit — co to je, klíčové pojmy a architektura

Autor: IT Sectr Publikováno: 2026-04-30 Doba čtení: 10 min

UIKit je framework pro vytváření grafických rozhraní v aplikacích pro iOS a macOS. Sada zahrnuje UIView, UIViewController, ovládací prvky a systém Auto Layout, umožňující vytvářet adaptivní a interaktivní obrazovky. Podle Apple Developer Documentation (2025) obsahuje UIKit více než 200 tříd pro práci s okny, pohledy, animacemi, gesty a textem — to je základ všech aplikací pro iPhone a iPad.

Hlavní body

  • UIKit — je framework Apple pro vytváření rozhraní na iOS, iPadOS a macOS s imperativním přístupem ke správě pohledů.
  • UIView — základní třída pro všechny vizuální prvky: tlačítka, textová pole, obrázky a kontejnery.
  • UIViewController spravuje životní cyklus obrazovky: od načtení pohledu po uvolnění paměti.
  • Auto Layout popisuje polohu prvků prostřednictvím systému omezení, přizpůsobující rozhraní různým velikostem obrazovek.
  • Delegáti a dataSource — klíčový vzor pro tabulky a kolekce, oddělující data a jejich zobrazení.

Co je UIKit?

UIKit — je framework od Apple, poskytující třídy pro vytváření a správu uživatelského rozhraní na iOS, iPadOS a macOS (přes Mac Catalyst). Pracuje nad Core Animation, Core Graphics a Quartz Core, abstrahuje nízkoúrovňové vykreslování do vysokoúrovňových objektů — tlačítek, štítků, obrázků a kontejnerů. UIKit se objevil spolu s iPhone OS 1 v roce 2007 a zůstává hlavním frameworkem pro vývoj iOS vedle SwiftUI.

Framework následuje imperativní přístup: vývojář vytváří instance tříd UIButton, UILabel, UIImageView, nastavuje jejich vlastnosti (barvu, písmo, polohu) a přidává je do hierarchie pohledů pomocí addSubview. Každá změna rozhraní se provádí explicitně — žádná magická aktualizace v pozadí. To odlišuje UIKit od deklarativních frameworků jako SwiftUI, kde popis stavu automaticky překresluje rozhraní.

Hlavní třídy UIKit

Framework zahrnuje několik kategorií tříd. UIView — základní prvek, od kterého dědí všechny vizuální komponenty. UIWindow — kontejner nejvyšší úrovně, přes který se pohledy zobrazují na obrazovce. UIViewController — kontrolér spravující sadu pohledů a reagující na otáčení obrazovky, zobrazení klávesnice a systémová oznámení. UIApplication — vstupní bod zpracovávající události dotyku a stisknutí tlačítek.

Pro text se používají UILabel (statický text), UITextField (jednořádkový vstup), UITextView (víceřádkový vstup). Pro tlačítka — UIButton, včetně systémových, vlastních a s ikonografií SF Symbols. Pro navigaci — UINavigationController, UITabBarController a UISplitViewController. Celkem UIKit obsahuje více než 200 veřejných tříd.

Architektura UIKit: vrstvy a hierarchie pohledů

Architektura UIKit je postavena na vrstvách: každá vrstva je zodpovědná za svůj aspekt zobrazení. Na nejnižší úrovni je Core Graphics — vykreslovací engine pro cesty, text a obrázky. Výše — Core Animation, spravující kompozici vrstev (CALayer) a animace mezi stavy. UIKit na nich staví objektově orientované API: UIView, UIViewController a UIResponder.

Každá aplikace má hierarchii pohledů (view hierarchy) — strom, jehož kořenem je UIWindow. Pod ním — kořenový UIViewController, jeho pohled a uvnitř — vnořené subview. Události dotyku se šíří podél řetězce responder chain: od nejvíce vnořeného pohledu k rodičům a dále k UIApplication. Pokud žádný objekt dotyk nezpracoval, je ignorován.

UIView a CALayer

Každý UIView obsahuje vrstvu CALayer odpovědnou za vykreslování pixelů na obrazovce. Pohled spravuje dotyky a přístupnost, vrstva — grafiku: shadow, cornerRadius, border, transform. Rozdělení umožňuje přesunout těžkou grafiku na samostatné vlákno (render server), aniž by blokovalo main thread. Apple doporučuje pracovat přímo s CALayer, pokud je potřeba více než 200 pohledů na obrazovce — to snižuje zátěž CPU.

Řetězec Responder podrobně

Řetězec responder začíná u objektu, který první přijímá událost dotyku. Pokud událost nezpracovává (metoda touchesBegan není přepsána), událost je předána dalšímu responderu v řetězci: next, superview, next responder, UIViewController, UIWindow, UIApplication, App Delegate. To umožňuje zachycovat globální gesta a události klávesnice na úrovni scény bez přidávání obsluhy do každého pohledu.

Životní cyklus UIViewController

Každý UIViewController prochází přesně definovanou posloupností událostí. Životní cyklus zahrnuje fáze: inicializace, načtení pohledu, zobrazení na obrazovce, aktualizace rozvržení při otočení, skrytí, opuštění obrazovky a uvolnění paměti. Vývojář přepisuje odpovídající metody, aby provedl svůj kód v každé fázi.

swift
class ProfileViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        loadUserProfile()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        clearCache()
    }
}

V viewDidLoad se konfiguruje rozhraní — vytvářejí se subview, nastavují omezení, přihlašují delegáti. V viewWillAppear se provádějí operace před zobrazením: načítání čerstvých dat ze sítě, aktualizace hodnot. viewDidDisappear — místo pro odhlášení z oznámení a čištění dočasných dat. Volání super je povinné ve všech přepsáních, jinak se řetězec událostí přeruší.

Správa paměti a viewDidUnload

Ve starších verzích iOS existovala metoda viewDidUnload, volaná při nedostatku paměti. Od iOS 6 byla metoda odstraněna — nyní UIKit automaticky uvolňuje pohledy kontroléru, když nejsou viditelné. Vývojář musí pouze deklarovat všechny reference na pohledy jako weak, aby ARC mohl správně uvolnit paměť při obdržení varování od systému.

Přechody mezi kontroléry

UIKit podporuje dva typy přechodů: segue (přes Storyboard) a programovou navigaci přes UINavigationController. Programový přechod vypadá takto: navigationController?.pushViewController(detailVC, animated: true). Přitom životní cyklus detailVC probíhá normálně — viewDidLoad se volá jednou, viewWillAppear — pokaždé při zobrazení.

Auto Layout a adaptivní rozvržení

Auto Layout — je systém umísťování prvků založený na matematických vztazích (omezeních). Místo pevně daných souřadnic X a Y vývojář popisuje pravidla: „tlačítko je napravo od štítku s odstupem 16pt” nebo „pohled se roztahuje na šířku obrazovky s okraji 20pt vlevo a vpravo”. Systém řeší výslednou soustavu rovnic za běhu, přizpůsobuje rozhraní libovolné velikosti obrazovky.

Omezení lze nastavit v Interface Builder (přes drag-and-drop) nebo programově ve Swiftu. Každé omezení je instancí třídy NSLayoutConstraint s parametry: firstItem, firstAttribute, relation, secondItem, secondAttribute, multiplier, constant. Omezení se aktivují pomocí isActive = true nebo hromadně pomocí NSLayoutConstraint.activate().

Safe Area a Layout Margins

S iPhone X (2017) Apple zavedl Safe Area — oblast obrazovky bez notch, zaoblených rohů a indikátoru home bar. Omezení by měla být vázána na view.safeAreaLayoutGuide, nikoli na view. Layout Margins přidávají vnitřní okraje pohledu, ve výchozím nastavení 8pt nebo 16pt v závislosti na kontextu. Použití safeAreaLayoutGuide zaručuje správné zobrazení na všech generacích iPhone a iPad.

Animace omezení

Auto Layout podporuje animaci prostřednictvím změny konstant omezení. Stačí aktualizovat constant omezení a zavolat UIView.animate s layoutIfNeeded uvnitř bloku animace. Systém plynule přepočítá polohu všech pohledů v hierarchii. Tato technika se používá pro rozbalovací bloky, adaptivní panel klávesnice a změnu orientace obrazovky.

Práce s tabulkami a kolekcemi

UITableView a UICollectionView — dva výkonné nástroje UIKit pro zobrazení seznamů a mřížek. UITableView je vhodný pro vertikální seznamy s jedním sloupcem (chat, nastavení, zpravodajský kanál). UICollectionView — pro mřížky, horizontální seznamy, karusely a vlastní rozvržení (galerie, produkty, kalendář). Obě třídy používají vzor delegování k oddělení dat a vzhledu.

Zdrojem dat je protokol UITableViewDataSource s povinnými metodami numberOfRowsInSection a cellForRowAt. Delegát UITableViewDelegate zpracovává klepnutí na buňky, výšku řádků a události posouvání. Mechanismus reuse identifier znovu používá buňky, které opustily obrazovku, což je kritické pro výkon na velkých seznamech.

swift
class ContactsViewController: UITableViewController {

    private let contacts = ["Anna", "Boris", "Viktor"]

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self,
                           forCellReuseIdentifier: "cell")
    }

    override func tableView(_ tableView: UITableView,
                          numberOfRowsInSection section: Int) -> Int {
        return contacts.count
    }

    override func tableView(_ tableView: UITableView,
                          cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell",
                                                 for: indexPath)
        var content = cell.defaultContentConfiguration()
        content.text = contacts[indexPath.row]
        cell.contentConfiguration = content
        return cell
    }
}

Příklad ukazuje minimální kontrolér pro zobrazení pole řetězců. Buňka je konfigurována pomocí UIListContentConfiguration — moderního API (iOS 14+), které nahradilo zastaralé textLabel a detailTextLabel. Registrace třídy buňky v viewDidLoad je povinná, jinak aplikace spadne s výjimkou za běhu.

UICollectionView a Compositional Layout

Od iOS 13 Apple doporučuje UICollectionViewCompositionalLayout pro vytváření složitých rozvržení. Vývojář popisuje sekci, skupinu, prvek a jejich velikosti deklarativně — dostává mřížku s libovolnou geometrií: pás, mřížka 2x2, karusel, ornament. Compositional Layout nahradil zastaralý UICollectionViewFlowLayout ve všech nových projektech. V kombinaci s DiffableDataSource se aktualizace kolekce redukuje na jedno volání apply(snapshot) a animace změn se provádí automaticky.

Příklady kódu ve Swiftu

Níže jsou dva praktické příklady použití UIKit v reálných úlohách: vytvoření vlastního pohledu se stínem a zaoblením a zpracování gesta přejetí pro odstranění prvku ze seznamu.

swift
extension UIView {
    func applyCardStyle() {
        layer.cornerRadius = 12
        layer.shadowOpacity = 0.15
        layer.shadowRadius = 8
        layer.shadowOffset = CGSize(width: 0, height: 2)
        layer.masksToBounds = false
    }
}

@objc private func handleSwipe(_ gesture: UISwipeGestureRecognizer) {
    guard let swipedView = gesture.view else { return }
    UIView.animate(withDuration: 0.3) {
        swipedView.alpha = 0
        swipedView.transform = CGAffineTransform(translationX: 300, y: 0)
    } completion: { _ in
        swipedView.removeFromSuperview()
    }
}

Rozšíření applyCardStyle přidává stín a zaoblení libovolnému pohledu — užitečné pro karty produktů, profily a oznámení. Metoda handleSwipe s animací odstraní prvek, pokud uživatel přejel doprava. Obsluha se přidává na pohled přes addGestureRecognizer s konfigurací UISwipeGestureRecognizer(direction: .right). Nastavení masksToBounds = false je důležité, aby stín nebyl oříznut okraji pohledu.

Pro složitější rozhraní použijte UIStackView — kontejner, který automaticky rozmísťuje vnořené pohledy horizontálně nebo vertikálně. Stack View zjednodušuje rozvržení: není třeba nastavovat omezení pro každý prvek, stačí jedno omezení pro samotný stack.

Často kladené otázky

Jaký je rozdíl mezi frame a bounds u UIView?

Frame — obdélník v souřadnicích superview (poloha + velikost). Bounds — obdélník ve vlastních souřadnicích pohledu (vždy začíná od 0,0). Frame se mění při rotate a scale, bounds — ne.

Jak uvolnit paměť z nepoužívaných pohledů?

UIKit automaticky uvolňuje pohledy skrytých kontrolérů. Vývojář musí pouze deklarovat vlastnosti pohledů jako weak var, aby ARC mohl uvolnit paměť při varování od systému.

Vyplatí se používat Storyboard v roce 2026?

Pro nové projekty Apple doporučuje SwiftUI. Pokud je projekt na UIKit — použijte XIB pro jednotlivé obrazovky nebo programové rozvržení přes SnapKit. Storyboard vytváří konflikty při slučování a zpomaluje sestavení.

Jak implementovat tmavý režim v UIKit?

Použijte UIColor s podporou traitCollection: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Aktivujte Dark Mode v Info.plist klíčem UIUserInterfaceStyle.

V čem je UIStackView lepší než ruční omezení?

UIStackView automaticky vypočítává pozice a velikosti vnořených pohledů na základě alignment, distribution a spacing. To zkracuje kód omezení o 60–80 % a zjednodušuje přizpůsobení různým obrazovkám.

Shrnutí

  • UIKit — hlavní framework Apple pro vytváření rozhraní iOS, iPadOS a macOS s imperativním přístupem.
  • UIView spravuje vykreslování a dotyky; jeho grafickou část zpracovává vrstva CALayer běžící na samostatném vlákně.
  • UIViewController prochází přísným životním cyklem: od viewDidLoad po uvolnění paměti s možností přepsat každou fázi.
  • Auto Layout nahrazuje pevné souřadnice systémem omezení, přizpůsobuje rozhraní libovolným obrazovkám a orientacím.
  • UITableView a UICollectionView s reuse identifier zajišťují výkon na velkých seznamech a podporují moderní Compositional Layout.
  • UIStackView zjednodušuje rozvržení sekvencí pohledů, zkracuje kód omezení o 60–80 %.
  • Pro nové projekty Apple doporučuje SwiftUI, ale UIKit zůstává relevantní pro podporu starších iOS a složitá vlastní rozhraní.

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é