NEW: Join my free 100 Days of SwiftUI challenge today! >>

How to hide the label of a Picker, Stepper, Toggle, and more using labelsHidden()

Paul Hudson    @twostraws   

Fully updated for Xcode 11 GM

SwiftUI requires that we add labels to its controls, and it’s common to want to hide those labels so you can get a more precise UI layout. However, there’s a bad way of hiding labels and a good way, and it’s already common to see folks choosing the bad choice despite it actively hurting users.

First, let’s look at the right way to hide labels. As an example, here’s a Picker that lets users select a number:

Picker("Select a number", selection: $selectedNumber) {
    ForEach(0..<10) {
        Text("\($0)")
    }
}

By default, that will show “Select a number” on the left, and (on iOS at least) a wheel picker on the right. This looks poor, because the label is crammed into a small space – a better idea would be to have a VStack with a custom text label, then hide the label in the Picker.

To hide the label for a Picker – or indeed for a DatePicker, a Stepper, a Toggle, or any other view that requires a label – you should add the labelsHidden() modifier to the view, like this:

Picker("Select a number", selection: $selectedNumber) {
    ForEach(0..<10) {
        Text("\($0)")
    }
}
.labelsHidden()

That still creates the label, but now it doesn’t get shown. As a result, you can put the Picker inside a VStack and add a label of your own choosing.

Tip: If you want all your labels hidden you can apply the labelsHidden() modifier to a VStack or whatever you’re using as your outermost container.

In case you were curious, the wrong way to hide labels is using EmptyView, like this:

Picker(selection: $selectedNumber, label: EmptyView()) {
    ForEach(0..<10) {
        Text("\($0)")
    }
}

Yes, the end result might look the same, but there’s an important reason why using labelsHidden() is much better: the hidden label is still accessible by the screen reader, so even though the text isn’t visible it’s still there to help VoiceOver understand how your UI is structured.

LEARN SWIFTUI FOR FREE I have a massive, free SwiftUI video collection on YouTube teaching you how to build complete apps with SwiftUI – check it out!

Similar solutions…

MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!