← Back to list

Widget Size Still Not Enough? iOS 27 Gives You a 4×6 Canvas

iOS 27’s extra-large widget is not just “one more size.” For developers, it changes the design problem.

Hui Wang · 2026-06-10 20:59 · 0 claps · 2.9 min read
#ios-development #swiftui #widgetkit #apple #ios-27
Open on Medium ↗
Wiki topics: TLS · Design Tools & Workflow 📱 · Mobile Development

Widget Size Still Not Enough? iOS 27 Gives You a 4×6 Canvas

iOS 27’s extra-large widget is not just “one more size.” For developers, it changes the design problem.

A small widget can get away with showing one number. A medium widget can show a little context. A large widget can show a summary. But a 4×6 widget has enough room to become something more useful: a compact dashboard.

The mistake is obvious: take the old large widget, add more rows, and call it done.

That is not using the new space well.

The real question is:

What can the user understand in two seconds without opening the app?

The key idea

WidgetKit already gives developers the tool that matters: WidgetFamily.

When WidgetKit loads a timeline, the system passes context about the widget’s size and shape. In the view layer, SwiftUI also exposes the current family through:

@Environment(\.widgetFamily) private var family

That means your widget should not have one layout stretched across every size. Each family should own a different level of information.

For iOS 27’s extra-large portrait widget, the key family is:

.systemExtraLargePortrait

Think of it as a new information tier, not just a bigger rectangle.

Core example: a portfolio widget that uses the new size correctly

Problem:

A stock portfolio app already has a widget.
On small sizes, it shows one key signal.
On the new 4×6 widget, it should show more context without becoming a dense stock table.

Naive approach:

// Bigger widget, more rows.
// This fills the space, but still makes the user scan manually.
ForEach(entry.stocks.prefix(12)) { stock in
    StockRow(stock: stock)
}

Better approach: use WidgetFamily to change the information hierarchy.

import WidgetKit
import SwiftUI

struct PortfolioEntry: TimelineEntry {
    let date: Date
    let totalValue: String
    let dailyChange: String
    let alert: String
    let stocks: [Stock]
}

struct Stock: Identifiable {
    let id = UUID()
    let symbol: String
    let change: String
}

struct PortfolioWidgetView: View {
    @Environment(\.widgetFamily) private var family

    let entry: PortfolioEntry

    var body: some View {
        switch family {
        case .systemSmall:
            VStack(alignment: .leading) {
                Text(entry.stocks.first?.symbol ?? "Portfolio")
                    .font(.headline)

                Text(entry.stocks.first?.change ?? entry.dailyChange)
                    .font(.title.bold())
            }

        case .systemMedium, .systemLarge:
            VStack(alignment: .leading, spacing: 8) {
                Text("Portfolio")
                    .font(.headline)

                Text(entry.totalValue)
                    .font(.title.bold())

                Text("Today \(entry.dailyChange)")
                    .font(.subheadline)
            }

        case .systemExtraLargePortrait:
            VStack(alignment: .leading, spacing: 12) {
                Text("Portfolio")
                    .font(.headline)

                Text(entry.totalValue)
                    .font(.system(.title, design: .rounded).bold())

                Text("Today \(entry.dailyChange)")
                    .font(.subheadline)

                Text(entry.alert)
                    .font(.callout)
                    .padding(8)
                    .frame(maxWidth: .infinity, alignment: .leading)
                    .background(.quaternary, in: RoundedRectangle(cornerRadius: 10))

                Text("Top movers")
                    .font(.headline)

                ForEach(entry.stocks.prefix(4)) { stock in
                    HStack {
                        Text(stock.symbol).bold()
                        Spacer()
                        Text(stock.change)
                    }
                    .font(.caption)
                }
            }

        default:
            Text("Portfolio")
        }
    }
}

The code is simple, but the design decision is important:

systemSmall              -> one signal
systemMedium/systemLarge -> summary
systemExtraLargePortrait -> dashboard

The extra-large widget does not simply show more stocks. It shows:

Portfolio value
-> Today’s change
-> One important alert
-> A few supporting movers

That is much easier to scan.

Why this works

A bigger widget only helps if it reduces the user’s thinking.

A list of twelve stocks gives the user more data, but not necessarily more clarity. A dashboard gives the user structure: current state, important exception, and supporting detail.

That structure is exactly what the new widget size is good at.

For a portfolio app, the user’s real question is not:

What are all my stock prices?

It is usually:

Is anything important happening right now?

The 4×6 canvas finally gives enough room to answer that question without opening the app.

One practical detail: do not rely on exact pixel assumptions. Widget sizes can vary by device, placement, and platform. Write flexible SwiftUI layouts, avoid hard-coded heights, and let each WidgetFamily define the information density.

Practical rule

When a widget gets bigger, do not increase row count first.

Increase decision quality first.

Use the extra space like this:

Primary state
-> Important exception
-> Supporting detail

If your extra-large widget is just your large widget with more rows, redesign it.

Conclusion

  • iOS 27’s extra-large widget size is valuable because it creates room for hierarchy.
  • The key WidgetKit idea is to branch layout by WidgetFamily.
  • systemExtraLargePortrait should be designed as a compact dashboard, not a stretched large widget.
  • A good widget helps the user decide whether they need to open the app.
  • Interview-friendly sentence: widget families are not just sizes; they are contracts for different levels of information density.

메타데이터
post_id
fb9fe89287d2
slug
widget-size-still-not-enough-ios-27-gives-you-a-4-6-canvas-fb9fe89287d2
url
https://medium.com/@foks.wang/widget-size-still-not-enough-ios-27-gives-you-a-4-6-canvas-fb9fe89287d2
canonical_url
https://medium.com/@foks.wang/widget-size-still-not-enough-ios-27-gives-you-a-4-6-canvas-fb9fe89287d2
author_url
https://medium.com/@foks.wang
status
ok
fetched_at
2026-07-13 06:23:13