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 (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).
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í).
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í.
| Vlastnost | WidgetKit | NCWidgetProviding |
|---|---|---|
| Minimální iOS | iOS 14 | iOS 8 |
| Umístění | Plocha + „Dnes” | Pouze „Dnes” |
| Velikosti | Small, Medium, Large | Jedna pevná |
| Interaktivita | iOS 17+ tlačítka a přepínače | Pouze otevření aplikace |
| Aktualizace | Timeline Provider | widgetPerformUpdate |
| Jazyk | SwiftUI | UIKit |
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.
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.
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.
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í.
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.
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.
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í.
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.
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 — 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ý.
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.
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.
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.
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á.
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.
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
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.
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.
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.
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.
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í
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í.