Canvas v Xcode — co to je, editor SwiftUI a práce s náhledem

Autor: IT Sectr Publikováno: 2026-06-27 Doba čtení: 10 min

Canvas — interaktivní editor náhledu Xcode, který zobrazuje SwiftUI View v reálném čase bez spuštění simulátoru. Canvas se automaticky aktualizuje při každé změně kódu a podporuje gesta, navigaci a tmavý režim. Podle Apple Developer Documentation (2026), Canvas používá samostatný proces renderování PreviewProviderExtension, což umožňuje upravovat kód a okamžitě vidět výsledek bez překompilování celého projektu. Více o SwiftUI si přečtěte v materiálu o SwiftUI.

Hlavní body

  • Canvas — interaktivní editor náhledu Xcode pro SwiftUI View v reálném čase.
  • PreviewProvider — povinný protokol pro práci Canvas: bez něj je editor prázdný.
  • Automatická aktualizace — Canvas překresluje UI při každé změně kódu bez sestavení projektu.
  • Interaktivita — Canvas podporuje gesta, navigaci, tmavý režim a emulaci zařízení.
  • Omezení UIKit — některé UIKit komponenty (MapKit, WebView) se v Canvas nerenrují.

Co je Canvas v Xcode?

Canvas — vestavěný editor náhledu Xcode, poprvé představený v Xcode 11 společně se SwiftUI. Nachází se v pravém panelu editoru vedle kódu a zobrazuje živý náhled aktuální SwiftUI View. Canvas pracuje v reálném čase: každá změna v kódu se okamžitě projeví v náhledu bez ručního překompilování.

Architektonicky je Canvas samostatný proces (Preview Provider Extension), který Xcode spouští při otevření Canvas. Proces načte zkompilovaný PreviewProvider, vykreslí výsledek přes Metal a zobrazí jej v panelu editoru. Pokud PreviewProvider není implementován, Canvas zobrazí zprávu „Preview paused — No preview provider found”.

Rozhraní Canvas

Rozhraní Canvas zahrnuje panel nástrojů s výběrem zařízení, orientace, barevného schématu a měřítka. Tlačítka Live Preview, Selectable a Embed In Diagram přepínají režimy interakce. Canvas podporuje split-view: lze otevřít více Canvas pro různé soubory v jedné pracovní oblasti.

Prvek CanvasÚčel
Device selectorVýběr zařízení pro náhled (iPhone, iPad, Apple Watch)
Orientation togglePřepnutí portrét/na šířku (iOS, iPadOS)
Color schemeSvětlý/tmavý režim
Dynamic Type sliderMěřítko písma pro kontrolu přístupnosti
Live PreviewInteraktivní režim s podporou gest
Selectable modeInspekce prvků rozhraní

Jak funguje interaktivní Canvas

Live Preview — klíčová možnost Canvas, která dělá náhled interaktivním. V tomto režimu Canvas vykresluje View v samostatném procesu a předává gesta (ťuknutí, přejetí, rolování) zpět do runtime SwiftUI. Uživatel může mačkat tlačítka, vyplňovat textová pole a testovat navigaci bez spuštění simulátoru.

SwiftUI zpracovává gesta v Canvas prostřednictvím stejného systému událostí jako na skutečném zařízení. Rozdíl ve výkonu: Canvas používá softwarové vykreslování přes Metal, zatímco simulátor používá hostitelskou grafiku. To znamená, že složité animace v Canvas mohou pracovat pomaleji nebo se vizuálně lišit.

Proces aktualizace Canvas

Aktualizace Canvas probíhá ve třech fázích. Nejprve Xcode detekuje změnu souboru a inkrementálně zkompiluje pouze změněný PreviewProvider. Poté se nový binární modul načte do procesu PreviewProviderExtension. Nakonec SwiftUI znovu vytvoří View a vykreslí ji přes Metal. Celý cyklus trvá 0.5–2 sekundy v závislosti na složitosti View.

swift
struct TappableButton: View {
    @State private var count = 0
    
    var body: some View {
        Button("\(count) klepnutí") {
            count += 1
        }
        .buttonStyle(.borderedProminent)
    }
}

struct TappableButton_Previews: PreviewProvider {
    static var previews: some View {
        TappableButton()
    }
}

Interaktivita: po spuštění Live Preview tlačítko v Canvas funguje jako skutečné — počítadlo se zvyšuje při každém stisknutí, animace stisknutí se zobrazuje. To umožňuje testovat logiku tlačítek bez simulátoru.

Nastavení Canvas

Základní nastavení Canvas jsou přístupná přes menu Editor → Canvas nebo pomocí tlačítek na panelu nástrojů samotného Canvas. Hlavní možnosti zahrnují výběr zařízení, orientace, tmavého režimu a měřítka Dynamic Type. Pro trvalá nastavení použijte modifikátory PreviewProvider v kódu.

Pokročilá nastavení zahrnují: Auto Activate Preview — automatické zapnutí Canvas při otevření SwiftUI souboru; Live Preview — režim s gesty; Draw Live Edges — zobrazení okrajů pohledu; Show Preview Sizes — velikost oblasti náhledu. Xcode ukládá tato nastavení přenosně v souborech workspace/projektu.

Nastavení přes PreviewProvider

Programové nastavení poskytuje přesnější kontrolu nad Canvas. Modifikátory aplikované v previews přepisují nastavení panelu nástrojů a ukládají se v kódu — všichni členové týmu je vidí přes git.

swift
struct SettingsView_Previews: PreviewProvider {
    static var previews: some View {
        SettingsView()
            .previewDevice("iPhone 16 Pro")
            .previewLayout(.device)
            .preferredColorScheme(.dark)
            .dynamicTypeSize(.xxxLarge)
            .previewDisplayName("Dark + XL Text")
    }
}

previewLayout s .device zobrazuje celou obrazovku zařízení, a .sizeThatFits — kompaktní náhled s velikostí přizpůsobenou obsahu. Pro widgety a malé komponenty použijte .sizeThatFits — šetří místo v editoru.

Příklady práce s Canvas

Příklad 1: kontrola přizpůsobivosti. Použijte ForEach s několika zařízeními a barevnými schématy, abyste se ujistili, že rozhraní vypadá stejně dobře na všech obrazovkách. Canvas aktualizuje všechny náhledy současně, což umožňuje zaznamenat problémy s rozložením před spuštěním simulátoru.

Příklad 2: náhled s daty. Pro View zobrazující dynamický obsah (seznamy, profily, karty) vytvořte několik instancí s různými daty v previews. To je rychlejší než přepínání mezi obrazovkami v simulátoru a zadávání dat.

Náhled s různými stavy

Skupina náhledů přes Group nebo ForEach umožňuje zobrazit všechny stavy komponenty na jednom panelu. Pro seznam je to obzvláště výhodné: prázdný seznam, načítání, chyba a naplněný seznam jsou viditelné současně.

swift
struct LoadingStateView: View {
    let state: LoadingState
    
    var body: some View {
        switch state {
        case .loading:
            ProgressView()
        case .loaded(let items):
            List(items, id: \.self) { Text($0) }
        case .error(let message):
            Text(message).foregroundColor(.red)
        }
    }
}

struct LoadingStateView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            LoadingStateView(state: .loading)
                .previewDisplayName("Loading")
            LoadingStateView(state: .loaded(["Item 1", "Item 2"]))
                .previewDisplayName("Loaded")
            LoadingStateView(state: .error("Failed to load"))
                .previewDisplayName("Error")
        }
    }
}

Canvas vs Simulator — srovnání

Canvas a Simulator se doplňují, nenahrazují. Canvas je ideální pro rychlou iteraci při tvorbě rozhraní: úprava kódu s okamžitou zpětnou vazbou. Simulator je nezbytný pro konečnou kontrolu: skutečný výkon, vlastní gesta, systémové alerty a integrace s hardwarovými funkcemi (kamera, senzory).

Podle WWDC 2024 Apple staví Canvas jako nástroj pro vývojáře v raných fázích a Simulator pro fázi integračního testování. 60% času vývoje UI se doporučuje strávit v Canvas, 40% — zkontrolovat na simulátoru nebo zařízení.

VlastnostCanvasSimulator
Rychlost aktualizace0.5–2 s (inkrementální)10–60 s (plné sestavení)
GestaZákladní (ťuknutí, rolování)Všechna (pinch, rotate, 3D Touch)
Kamera/gyroskopNepodporovánoSimuluje se
AnimaceOmezenéPlné
Push notifikaceNepodporovánoPodporováno
SíťPřes proces XcodePlný síťový stack

Doporučení: tvořte rozhraní v Canvas, testujte na simulatoru. Použijte Live Preview pro logiku gest tlačítek a navigace, ale konečnou kontrolu animací, síťových požadavků a hardwarových funkcí proveďte na simulátoru nebo skutečném zařízení.

Tipy pro práci s Canvas

Tip 1: používejte režim Selectable. V režimu Selectable (ikona kurzoru) můžete kliknout na libovolný prvek náhledu a vidět jeho hierarchii, modifikátory a rámec v inspektoru. To je užitečné pro ladění rozložení: okamžitě vidíte padding, offset a velikost prvku bez výpisů.

Tip 2: Embed In Diagram. Canvas umí seskupovat prvky: vyberte dvě nebo více View, klikněte Embed In Diagram — Canvas vytvoří VStack/HStack/ZStack a automaticky přepíše kód. To urychluje vytváření složité hierarchie bez ručního zadávání závorek.

Tip 3: čištění mezipaměti Canvas Preview. Pokud Canvas přestal aktualizovat, vyčistěte Product → Preview Cache. Xcode odstraní zazálohované binární soubory PreviewProvider a sestaví je znovu. To řeší 90% problémů se zaseknutým Canvas.

Optimalizace rychlosti Canvas

Pomalý Canvas je obvykle způsoben nadměrným počtem náhledů. Pro složité View použijte pouze jeden náhled, ne skupinu 6–8. Vypněte Live Preview pro View bez gest — statický režim renderuje rychleji. Ujistěte se, že PreviewProvider používá mocky, ne skutečné síťové požadavky.

swift
// Rychlé ladění: minimální náhled
struct ComplexView_Previews: PreviewProvider {
    static var previews: some View {
        ComplexView()
            .previewLayout(.sizeThatFits) // kompaktní režim
    }
}

previewLayout(.sizeThatFits) — nejrychlejší režim Canvas, protože se vykresluje pouze obsah View bez rámečku zařízení. Používejte jej pro každodenní práci, .device zapněte pouze pro konečnou kontrolu.

Často kladené otázky

Proč Canvas nezobrazuje náhled?

Nejčastější příčinou je chybějící PreviewProvider pro aktuální View. Canvas vyžaduje implementaci protokolu PreviewProvider s vrácením View ve vlastnosti previews. Další příčiny: chyba kompilace v kódu, problémy s DerivedData nebo proces PreviewProviderExtension se nespustil.

Lze ladit kód v Canvas?

Ano, Xcode podporuje ladění náhledu přes Product → Preview → Debug Preview. Po aktivaci se breakpoint v kódu View spustí při renderování Canvas. To umožňuje analyzovat runtime hodnoty proměnných a kontrolovat logiku zobrazení.

Podporuje Canvas UIKit komponenty?

Canvas podporuje UIKit komponenty přes UIViewRepresentable a UIViewControllerRepresentable. Některé komponenty se však nerenrují: MapKit, WebView, video přes AVPlayer, vlastní Metal/GLKit pohledy. Canvas neemuluje hardwarové možnosti, proto kamera a senzory nejsou k dispozici.

Jak zrychlit Canvas, pokud je pomalý?

Snižte počet náhledů v Group (max 3–4), použijte previewLayout(.sizeThatFits) místo .device, vypněte Live Preview pro View bez gest. Vyčistěte Product → Preview Cache. Ujistěte se, že PreviewProvider neprovádí síťové požadavky — použijte mock data.

Ovlivňuje Canvas velikost projektu?

Canvas neovlivňuje velikost výsledného IPA — kód PreviewProvider se kompiluje pouze v Debug konfiguraci. Během vývoje Canvas přidá 100–200 MB mezipaměti do DerivedData, kterou Xcode automaticky spravuje. Pravidelné čištění DerivedData uvolňuje místo.

Shrnutí

  • Canvas — interaktivní editor náhledu Xcode pro SwiftUI s aktualizací v reálném čase.
  • PreviewProvider — nezbytná podmínka pro Canvas: určuje obsah k zobrazení.
  • Live Preview — režim s podporou gest pro testování tlačítek, navigace a formulářů.
  • Nastavení — přes panel nástrojů Canvas a programové modifikátory PreviewProvider.
  • Canvas vs Simulator — Canvas pro tvorbu, Simulator pro konečné testování výkonu.
  • Optimalizace — .sizeThatFits, minimum náhledů, vypnutí Live Preview zrychlují Canvas.

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é