ShelfWidgetNotchWrapRow

The row beside the camera, laid out the way Droppy lays out its own (1.22.0): leading pinned to the band left of the notch or the camera island's pill, trailing to the band right of it, the middle left empty for the camera, the row as tall as headerHeight, the two halves centred on each other at its top: when the camera makes the row taller than its halves, the room is under them, never above.

@MainActor struct ShelfWidgetNotchWrapRow<Leading, Trailing> where Leading : View, Trailing : View

It is Droppy's NotchWingRow, the one every wrapped built-in row is drawn with (Pomodoro, Stay Awake, Notes, the Agents widget), so a droplet's row lands exactly where theirs do. Each half's own padding counts against its band, so a side inset goes on the content inside the closure, never on the row, and never move or pad the row itself:

VStack(alignment: .leading, spacing: DroppySpacing.sm) {
    if let wrap = context.notchWrap {
        ShelfWidgetNotchWrapRow(wrap) {
            ViewThatFits(in: .horizontal) { title; symbol }
        } trailing: {
            addButton(diameter: context.washControlSize)
        }
    } else {
        HStack { title; Spacer(minLength: 0); addButton(diameter: context.washControlSize) }
    }
    list
}
.padding(context.contentInsets)

Added in 1.22.0; a droplet that uses it declares minAPI 1.22.0.

Initializers

init(_:leading:trailing:)

@MainActor init(_ wrap: ShelfWidgetNotchWrap, @ViewBuilder leading: () -> Leading, @ViewBuilder trailing: () -> Trailing)

Creates the row for the bands the host handed down in notchWrap.

Properties

body

@MainActor var body: some View { get }