<!--
{
  "availability" : [
    "iOS: 13.0.0 -",
    "iPadOS: 13.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 10.15.0 -",
    "tvOS: 13.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 6.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "SwiftUI",
  "identifier" : "/documentation/SwiftUI/ToggleStyle",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "SwiftUI"
    ],
    "preciseIdentifier" : "s:7SwiftUI11ToggleStyleP"
  },
  "title" : "ToggleStyle"
}
-->

# ToggleStyle

The appearance and behavior of a toggle.

```
@MainActor @preconcurrency protocol ToggleStyle
```

## Overview

To configure the style for a single [`Toggle`](/documentation/SwiftUI/Toggle) or for all toggle instances
in a view hierarchy, use the [`toggleStyle(_:)`](/documentation/SwiftUI/View/toggleStyle(_:)) modifier. You can
specify one of the built-in toggle styles, like [`switch`](/documentation/SwiftUI/ToggleStyle/switch) or
[`button`](/documentation/SwiftUI/ToggleStyle/button):

```
Toggle(isOn: $isFlagged) {
    Label("Flag", systemImage: "flag.fill")
}
.toggleStyle(.button)
```

Alternatively, you can create and apply a custom style.

### Custom styles

To create a custom style, declare a type that conforms to the `ToggleStyle`
protocol and implement the required [`makeBody(configuration:)`](/documentation/SwiftUI/ToggleStyle/makeBody(configuration:))
method. For example, you can define a checklist toggle style:

```
struct ChecklistToggleStyle: ToggleStyle {
    func makeBody(configuration: Configuration) -> some View {
        // Return a view that has checklist appearance and behavior.
    }
}
```

Inside the method, use the `configuration` parameter, which is an instance
of the [`ToggleStyleConfiguration`](/documentation/SwiftUI/ToggleStyleConfiguration) structure, to get the label and
a binding to the toggle state. To see examples of how to use these items
to construct a view that has the appearance and behavior of a toggle, see
[`makeBody(configuration:)`](/documentation/SwiftUI/ToggleStyle/makeBody(configuration:)).

To provide easy access to the new style, declare a corresponding static
variable in an extension to `ToggleStyle`:

```
extension ToggleStyle where Self == ChecklistToggleStyle {
    static var checklist: ChecklistToggleStyle { .init() }
}
```

You can then use your custom style:

```
Toggle(activity.name, isOn: $activity.isComplete)
    .toggleStyle(.checklist)
```

A type conforming to this protocol inherits `@preconcurrency @MainActor`
isolation from the protocol if the conformance is included in the type’s
base declaration:

```
struct MyCustomType: Transition {
    // `@preconcurrency @MainActor` isolation by default
}
```

Isolation to the main actor is the default, but it’s not required. Declare
the conformance in an extension to opt out of main actor isolation:

```
extension MyCustomType: Transition {
    // `nonisolated` by default
}
```

## Topics

### Getting built-in toggle styles

[`automatic`](/documentation/SwiftUI/ToggleStyle/automatic)

The default toggle style.

[`button`](/documentation/SwiftUI/ToggleStyle/button)

A toggle style that displays as a button with its label as the title.

[`checkbox`](/documentation/SwiftUI/ToggleStyle/checkbox)

A toggle style that displays a checkbox followed by its label.

[`switch`](/documentation/SwiftUI/ToggleStyle/switch)

A toggle style that displays a leading label and a trailing switch.

### Creating custom toggle styles

[`makeBody(configuration:)`](/documentation/SwiftUI/ToggleStyle/makeBody(configuration:))

Creates a view that represents the body of a toggle.

[`ToggleStyleConfiguration`](/documentation/SwiftUI/ToggleStyleConfiguration)

The properties of a toggle instance.

[`ToggleStyle.Configuration`](/documentation/SwiftUI/ToggleStyle/Configuration)

The properties of a toggle instance.

[`Body`](/documentation/SwiftUI/ToggleStyle/Body)

A view that represents the appearance and interaction of a toggle.

### Supporting types

[`DefaultToggleStyle`](/documentation/SwiftUI/DefaultToggleStyle)

The default toggle style.

[`ButtonToggleStyle`](/documentation/SwiftUI/ButtonToggleStyle)

A toggle style that displays as a button with its label as the title.

[`CheckboxToggleStyle`](/documentation/SwiftUI/CheckboxToggleStyle)

A toggle style that displays a checkbox followed by its label.

[`SwitchToggleStyle`](/documentation/SwiftUI/SwitchToggleStyle)

A toggle style that displays a leading label and a trailing switch.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)