Today Widget: co to je, typy a tvorba widgetu oznámení

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

Today Widget je rozšíření iOS, které zobrazuje interaktivní informace přímo v Centru oznámení nebo na obrazovce „Dnes”. Uživatel vidí aktuální data — počasí, kurz měny, kalendář — bez otevření hlavní aplikace. Podle údajů Apple WWDC (2025) vzrostlo použití WidgetKit o 40 % po zavedení interaktivních widgetů v iOS 17. Today Widget řeší problém rychlého přístupu k informacím: pohled na obrazovku — a uživatel získá potřebná data bez navigace v aplikaci.

Hlavní body

  • Today Widget — rozšíření iOS pro zobrazení informací v Centru oznámení.
  • WidgetKit — moderní framework pro tvorbu widgetů (iOS 14+).
  • NCWidgetProviding — protokol pro rozšíření Centra oznámení (iOS 8–13).
  • Auto Layout — přizpůsobení widgetu různým velikostem obrazovky.
  • Timeline Provider — mechanismus aktualizace dat ve WidgetKit.

Co je Today Widget

Today Widget (také známý jako widget Centra oznámení) — prvek rozhraní iOS, který zobrazuje stručné informace z aplikace bez jejího spuštění. Uživatel vidí widget přejetím obrazovky doleva na uzamčené obrazovce nebo na hlavní obrazovce. Widget může zobrazovat dynamická data — kurz měny, nejnovější zprávy, stav úkolů, stav zařízení.

Historicky se Today Widget objevil v iOS 8 jako rozšíření Centra oznámení implementované prostřednictvím frameworku Notification Center. S iOS 14 Apple představil WidgetKit — zcela přepracovanou architekturu, která umožňuje umístit widgety přímo na plochu. Today Widget v moderním pojetí — widget WidgetKit umístěný v sekci „Dnes” (sekce widgetů vlevo od první obrazovky).

Proč je Today Widget potřeba

Hlavním cílem je zkrátit dobu přístupu k informacím. Místo otevírání aplikace, navigace v menu a čekání na načtení uživatel okamžitě vidí potřebná data. Podle Apple (2024) vykazují aplikace s widgety o 27 % vyšší zapojení uživatelů. Další scénáře: rychlé akce (označení úkolu jako dokončeného), monitorování (puls, aktivita) a stav (nabíjení baterie, oznámení).

WidgetKit versus NCWidgetProviding

Vývojář Today Widget má dva přístupy: moderní WidgetKit (iOS 14+) a starší rozšíření NCWidgetProviding (iOS 8–13). Volba závisí na minimální podporované verzi iOS. WidgetKit je doporučen pro nové projekty, NCWidgetProviding — pro podporu starších zařízení.

VlastnostWidgetKitNCWidgetProviding
Minimální iOSiOS 14iOS 8
UmístěníPlocha + „Dnes”Pouze „Dnes”
VelikostiSmall, Medium, LargeJedna pevná
InteraktivitaiOS 17+ tlačítka a přepínačePouze otevření aplikace
AktualizaceTimeline ProviderwidgetPerformUpdate
JazykSwiftUIUIKit

Kdy použít WidgetKit

Pokud vaše aplikace podporuje iOS 14 a novější — použijte WidgetKit. Nabízí bohaté možnosti: několik velikostí, konfiguraci pomocí intent, redesign s iOS 17 a hluboké odkazy. Deklarativnost SwiftUI činí kód widgetu kompaktním a čitelným. Timeline Provider automaticky spravuje plán aktualizací s ohledem na spotřebu energie.

Kdy použít NCWidgetProviding

Pouze pokud je vyžadována podpora iOS 9–13. NCWidgetProviding je jednodušší na implementaci — je to běžný UIViewController s protokolem. Je však omezený: jedna velikost, pouze UIKit, bez konfigurace. Apple doporučuje přejít na WidgetKit i u starých projektů pomocí availability check: WidgetKit na iOS 14+, NCWidgetProviding jako fallback.

Typy Today Widgetů

V moderním iOS se rozlišují tři typy widgetů podle funkčního účelu. Každý typ řeší svůj vlastní úkol a vyžaduje jiný přístup k návrhu dat a rozhraní. Klasifikace pomáhá vybrat správnou architekturu pro vaši aplikaci.

Informační widgety

Zobrazují statické nebo pravidelně aktualizované informace: počasí, datum, kurz měny, stav serveru. Data se aktualizují podle plánu prostřednictvím Timeline Provider. Uživatel s widgetem neinteraguje — pouze čte. Informační widgety — nejjednodušší na implementaci, nevyžadují zpracování dotykových událostí a pracují na pozadí bez dalších oprávnění.

Interaktivní widgety

Od iOS 17 WidgetKit podporuje tlačítka, přepínače a posuvníky ve widgetech. Uživatel může provést akci — označit úkol, pozastavit hudbu, zapnout světlo — bez otevření aplikace. Interactive Widgets používají App Intents k přenosu akce do hlavní aplikace. Omezení: pouze na ploše, ne v sekci „Dnes” do iOS 18.

Konfigurovatelné widgety

Uživatel si přizpůsobuje zobrazená data prostřednictvím systémového rozhraní — vybírá město pro počasí, účet pro finance, kategorii pro zprávy. Implementuje se pomocí Intents Extension a konfigurace ve WidgetBundle. Konfigurovatelné widgety zvyšují personalizaci a relevanci informací pro každého uživatele.

Vytvoření widgetu WidgetKit

Podívejme se na proces vytvoření Today Widget ve SwiftUI pomocí WidgetKit. Widget bude zobrazovat aktuální kurz měny s automatickou aktualizací. WidgetKit vyžaduje tři komponenty: strukturu widgetu, Provider s konfigurací a View pro zobrazení.

swift
import WidgetKit
import SwiftUI

@main
struct CurrencyWidget: Widget {
    let kind: String = "CurrencyWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            CurrencyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Currency Rate")
        .description("Current USD/RUB exchange rate")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

Provider je zodpovědný za přípravu dat k zobrazení. Metoda getTimeline vytváří plán aktualizací: další aktualizace za 15 minut. TimelineProvider zaručuje, že widget zobrazuje aktuální data bez neustálého dotazování serveru.

swift
struct Provider: TimelineProvider {
    func getSnapshot(in context: Context,
                      completion: @escaping (CurrencyEntry) -> Void) {
        let entry = CurrencyEntry(date: Date(), rate: 92.5)
        completion(entry)
    }

    func getTimeline(in context: Context,
                     completion: @escaping (Timeline<CurrencyEntry>) -> Void) {
        let rate = CurrencyService().fetchRate()
        let entry = CurrencyEntry(date: Date(), rate: rate)
        let nextUpdate = Calendar.current.date(
            byAdding: .minute, value: 15, to: Date()
        ) ?? Date()
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline)
    }
}

Timeline Provider a aktualizace dat

Timeline Provider — centrální mechanismus WidgetKit pro správu dat Today Widget. Místo pravidelné aktualizace časovačem (jako u starého NCWidgetProviding) používá WidgetKit koncept timeline — sekvence záznamů s časovými razítky. Systém zobrazuje aktuální záznam do jeho vypršení, poté přepne na další nebo vyžádá nový.

Zásady aktualizace

Timeline podporuje tři zásady: .after(date) — další aktualizace v určeném datu; .never — widget se neaktualizuje do explicitního volání WidgetCenter.reloadAllTimelines; .atEnd — aktualizace po zobrazení posledního záznamu. Pro Today Widget s kurzem měny je zásada .after s intervalem 15–30 minut optimální. Energetická účinnost — klíčová výhoda WidgetKit: systém seskupuje aktualizace všech widgetů do jednoho okna.

WidgetCenter: programová aktualizace

Pokud se data změnila před vypršením timeline (např. uživatel aktualizoval kurz v aplikaci), zavolejte WidgetCenter.shared.reloadTimelines(ofKind: "CurrencyWidget"). To vyžádá nový timeline od Provideru a aktualizuje zobrazení. WidgetCenter také umožňuje znovu načíst všechny widgety aplikace jedním příkazem — užitečné po synchronizaci dat.

Doporučení pro design widgetů

Apple klade přísné požadavky na design Today Widget: obsah musí být čitelný na dálku, bez zbytečných prvků a s jasnou hierarchií. Porušení doporučení HIG (Human Interface Guidelines) je důvodem k odmítnutí při publikaci v App Store. Tři principy: glanceability, consistency a hierarchy.

Glanceability — čitelnost na první pohled

Uživatel stráví widgetem méně než sekundu. Nepřidávejte více než 3–4 datové prvky. Písmo — minimálně 11pt pro popisky, 17pt pro hodnoty. Použijte tučné (Semibold) písmo pro klíčová čísla. Vyhněte se posouvání — Today Widget se neposouvá.

Přizpůsobení velikostem

WidgetKit podporuje tři velikosti: Small (170×170pt), Medium (364×170pt), Large (364×382pt). Pro Today Widget v sekci „Dnes” je Medium nejčastější volbou. Adaptivní design prostřednictvím EnvironmentValues: měňte hustotu informací v závislosti na velikosti. Small — jedno číslo, Medium — číslo + graf, Large — tabulka.

Podpora tmavého režimu a Dynamic Type

Widget se musí správně zobrazovat ve světlém i tmavém režimu bez dalších zásahů vývojáře — WidgetKit automaticky přebírá systémové barvy. Dynamic Type pro widgety je omezený: velikost písma je pevná, ale musí být čitelná. UIColor.label a UIColor.systemBackground — základní barvy pro text a pozadí v obou režimech.

Často kladené otázky

Čím se Today Widget liší od běžného widgetu na ploše?

Dnes je to stejný WidgetKit widget. Rozdíl je pouze v umístění: na ploše a v sekci „Dnes” (vlevo od první obrazovky). Do iOS 14 byl Today Widget samostatným rozšířením NCWidgetProviding, které fungovalo pouze v Centru oznámení. Nyní je to jednotný WidgetKit.

Jak často se Today Widget aktualizuje?

WidgetKit neaktualizuje widgety časovačem. Vývojář nastaví plán prostřednictvím Timeline Provider: záznamy s časovými razítky. Systém garantuje aktualizaci v určený čas s ohledem na úsporu energie — může zpozdit o několik minut. Minimální interval — 15 minut, ale Apple doporučuje ne častěji než 1krát za hodinu.

Lze vytvořit Today Widget s interaktivními tlačítky?

Ano, od iOS 17 WidgetKit podporuje tlačítka, přepínače a posuvníky prostřednictvím App Intents. Interaktivní prvky fungují na ploše iPhone a iPad. V sekci „Dnes” se podpora objevila v iOS 18. Pro iOS 16 a starší — pouze otevření aplikace při klepnutí na widget.

Kolik Today Widgetů může být v jedné aplikaci?

Neexistují žádná omezení. Aplikace může zaregistrovat libovolný počet widgetů prostřednictvím WidgetBundle — každý s vlastním typem, velikostí a konfigurací. Uživatel je přidává samostatně. Doporučuje se nejvýše 3–5 widgetů, aby nedošlo k přetížení výběru uživatele.

Jak testovat Today Widget na simulátoru?

WidgetKit je plně podporován v iOS Simulatoru. Spusťte schéma WidgetKit target v Xcode — widget se objeví na ploše simulátoru. Pro kontrolu Timeline Provider použijte WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Skutečné chování ověřte na fyzickém zařízení.

Shrnutí

  • Today Widget — rozšíření iOS pro zobrazení informací bez otevření aplikace.
  • WidgetKit (iOS 14+) — moderní framework, NCWidgetProviding — starší pro staré verze.
  • Tři typy widgetů: informační, interaktivní (iOS 17+), konfigurovatelné přes Intents.
  • Timeline Provider spravuje plán aktualizací místo časovačů.
  • Design by měl být glanceable: minimum prvků, velké písmo, přizpůsobení velikostem.
  • Interaktivita prostřednictvím App Intents — tlačítka a přepínače bez otevření aplikace.
  • WidgetCenter.shared.reloadTimelines — programová aktualizace při změně dat.

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é