---
title: Slider
framework: swiftui
role: symbol
role_heading: Structure
path: swiftui/slider
---

# Slider

A control for selecting a value from a bounded linear range of values.

## Declaration

```swift
nonisolated struct Slider<Label, ValueLabel> where Label : View, ValueLabel : View
```

## Mentioned in

Populating SwiftUI menus with adaptive controls

## Overview

Overview A slider consists of a “thumb” image that the user moves between two extremes of a linear “track”. The ends of the track represent the minimum and maximum possible values. As the user moves the thumb, the slider updates its bound value. The following example shows a slider bound to the value speed. As the slider updates this value, a bound Text view shows the value updating. The onEditingChanged closure passed to the slider receives callbacks when the user drags the slider. The example uses this to change the color of the value text. @State private var speed = 50.0 @State private var isEditing = false

var body: some View {     VStack {         Slider(             value: $speed,             in: 0...100,             onEditingChanged: { editing in                 isEditing = editing             }         )         Text("\(speed)")             .foregroundColor(isEditing ? .red : .blue)     } }

You can also use a step parameter to provide incremental steps along the path of the slider. For example, if you have a slider with a range of 0 to 100, and you set the step value to 5, the slider’s increments would be 0, 5, 10, and so on. The following example shows this approach, and also adds optional minimum and maximum value labels. @State private var speed = 50.0 @State private var isEditing = false

var body: some View {     Slider(         value: $speed,         in: 0...100,         step: 5     ) {         Text("Speed")     } minimumValueLabel: {         Text("0")     } maximumValueLabel: {         Text("100")     } onEditingChanged: { editing in         isEditing = editing     }     Text("\(speed)")         .foregroundColor(isEditing ? .red : .blue) }

The slider also uses the step to increase or decrease the value when a VoiceOver user adjusts the slider with voice commands.

## Topics

### Creating a slider

- [init(value:in:onEditingChanged:)](swiftui/slider/init(value:in:oneditingchanged:).md)
- [init(value:in:step:onEditingChanged:)](swiftui/slider/init(value:in:step:oneditingchanged:).md)

### Creating a slider with labels

- [init(value:in:label:onEditingChanged:)](swiftui/slider/init(value:in:label:oneditingchanged:).md)
- [init(value:in:step:label:onEditingChanged:)](swiftui/slider/init(value:in:step:label:oneditingchanged:).md)
- [init(value:in:label:minimumValueLabel:maximumValueLabel:onEditingChanged:)](swiftui/slider/init(value:in:label:minimumvaluelabel:maximumvaluelabel:oneditingchanged:).md)
- [init(value:in:step:label:minimumValueLabel:maximumValueLabel:onEditingChanged:)](swiftui/slider/init(value:in:step:label:minimumvaluelabel:maximumvaluelabel:oneditingchanged:).md)

### Adding ticks to a slider

- [SliderTick](swiftui/slidertick.md)
- [SliderTickBuilder](swiftui/slidertickbuilder.md)
- [SliderTickContentForEach](swiftui/slidertickcontentforeach.md)
- [TupleSliderTickContent](swiftui/tupleslidertickcontent.md)
- [SliderTickContent](swiftui/slidertickcontent.md)

### Deprecated initializers

- [init(value:in:onEditingChanged:label:)](swiftui/slider/init(value:in:oneditingchanged:label:).md)
- [init(value:in:step:onEditingChanged:label:)](swiftui/slider/init(value:in:step:oneditingchanged:label:).md)
- [init(value:in:onEditingChanged:minimumValueLabel:maximumValueLabel:label:)](swiftui/slider/init(value:in:oneditingchanged:minimumvaluelabel:maximumvaluelabel:label:).md)
- [init(value:in:step:onEditingChanged:minimumValueLabel:maximumValueLabel:label:)](swiftui/slider/init(value:in:step:oneditingchanged:minimumvaluelabel:maximumvaluelabel:label:).md)

### Initializers

- [init(value:in:neutralValue:enabledBounds:label:currentValueLabel:minimumValueLabel:maximumValueLabel:onEditingChanged:)](swiftui/slider/init(value:in:neutralvalue:enabledbounds:label:currentvaluelabel:minimumvaluelabel:maximumvaluelabel:oneditingchanged:).md)
- [init(value:in:neutralValue:enabledBounds:label:currentValueLabel:minimumValueLabel:maximumValueLabel:ticks:onEditingChanged:)](swiftui/slider/init(value:in:neutralvalue:enabledbounds:label:currentvaluelabel:minimumvaluelabel:maximumvaluelabel:ticks:oneditingchanged:).md)
- [init(value:in:step:neutralValue:enabledBounds:label:currentValueLabel:minimumValueLabel:maximumValueLabel:tick:onEditingChanged:)](swiftui/slider/init(value:in:step:neutralvalue:enabledbounds:label:currentvaluelabel:minimumvaluelabel:maximumvaluelabel:tick:oneditingchanged:).md)

## Relationships

### Conforms To

- [View](swiftui/view.md)

## See Also

### Getting numeric inputs

- [Stepper](swiftui/stepper.md)
- [Toggle](swiftui/toggle.md)
- [toggleStyle(_:)](swiftui/view/togglestyle(_:).md)
