Table of Contents
Optimising Interactive Controls and Touch Targets
When building an iOS application, it is important to design buttons and other interactive elements so they’re easy for all users to tap. Apple’s guidelines recommend a minimum target size of roughly 44x44 points. This lesson demonstrates how to configure your app’s interactive controls for optimal accessibility, along with clear examples of what to avoid—and how to fix it.
🎯 Why It Matters
When building an iOS application, it is crucial to design buttons and other interactive elements so they're easy for all users to tap. Apple's guidelines recommend a minimum target size of roughly 44x44 points.
Imagine a user trying to tap a tiny button on a busy screen. Users with visual or motor impairments may find this especially challenging and frustrating. Small touch targets create significant accessibility barriers:
- Motor Impairments: Users with limited dexterity, tremors, or conditions affecting fine motor control struggle with small, precise tapping
- Visual Impairments: Users with low vision may have difficulty locating and accurately tapping small controls
- Situational Challenges: Even users without disabilities may struggle with small targets when using their device one-handed, while moving, or in other challenging contexts
Enlarging buttons or adding sufficient padding around them drastically reduces accidental taps, enhances usability, and meets Apple's suggested guidelines. By making these targets both bigger and well-spaced, you help everyone navigate your app with confidence and ease.
💻 Implementation
Incorrect Code Example: Slider Too Small to Handle Easily
Demo Description
Here, the slider has a compact frame, making it difficult for users to grab and manipulate—especially on smaller screens or for those with limited dexterity.
// SwiftUI
import SwiftUI
struct IncorrectSliderView: View {
@State private var volume: Double = 0.5
var body: some View {
VStack {
Text("Volume")
Slider(value: $volume)
.frame(width: 150) // Too narrow
.padding(4) // Minimal padding
.accessibilityValue("\(Int(volume * 100)) percent")
}
.padding()
}
}Code Explanation
In this snippet, the slider’s width is tightly constrained to 150 points, and the minimal padding around it leaves little room for comfortable dragging. Users could easily miss the thumb control or struggle to land a precise value.
Correct Code Example: Slider with Generous Touch Target
Demo Description
This example ensures that the slider has a sufficiently wide frame and uses additional padding to create a comfortable interaction zone.
// SwiftUI
import SwiftUI
struct CorrectSliderView: View {
@State private var volume: Double = 0.5
var body: some View {
VStack(spacing: 16) {
Text("Volume")
.font(.headline)
Slider(value: $volume)
.frame(minWidth: 250) // Wider frame for easier grip
.padding(.horizontal, 20) // Extra horizontal padding
.accessibilityLabel("Volume Control")
.accessibilityValue("\(Int(volume * 100)) percent")
}
.padding()
}
}Code Explanation
Here, the slider is at least 250 points wide, reducing the likelihood of overshooting the thumb control. The added horizontal padding creates even more space around it, making the control easier to tap. We also include the accessibility-Label function and the accessibility-Value function for screen reader clarity.
✅ Best Practices
Do's
- ✓Ensure minimum touch target sizes of 44x44 points for all interactive elements
- ✓Add generous padding around controls to increase the tappable area
- ✓Use `.contentShape(Rectangle())` to expand hit areas without changing visual appearance
- ✓Provide adequate spacing between adjacent interactive elements
- ✓Test controls with different hand sizes and grip styles
- ✓Include accessibility labels and values for all interactive controls
- ✓Consider larger touch targets (48x48 or larger) for frequently used controls
Don'ts
- ✗Create interactive elements smaller than 44x44 points
- ✗Place interactive controls too close together (minimum 8 points spacing)
- ✗Rely solely on visual size—ensure the tappable area is adequate
- ✗Forget to test with VoiceOver and other assistive technologies
- ✗Use minimal padding that makes controls difficult to target accurately
- ✗Assume users can tap small targets precisely, especially on small screens
- ✗Ignore the needs of users with motor impairments or situational challenges
🔍 Common Pitfalls
Visual Size vs. Touch Target Size
Making a control look larger visually but forgetting to expand the actual tappable area—the hit region must be at least 44x44 points
Insufficient Spacing
Placing interactive controls too close together, causing users to accidentally tap the wrong element
Narrow Sliders
Creating sliders that are too short or narrow, making the thumb control difficult to grab and drag precisely
Ignoring Padding
Failing to add adequate padding around controls, which shrinks the comfortable interaction zone
Inconsistent Sizing
Using different touch target sizes throughout the app, creating an unpredictable user experience
Small Text Buttons
Using text-only buttons without sufficient padding, resulting in touch targets smaller than 44x44 points
VoiceOver/TalkBack
Screen readers will focus on interactive elements and announce their labels and current values. Larger touch targets make it easier for VoiceOver users to explore the screen by touch and locate controls. When a slider is focused, VoiceOver allows users to swipe up or down to adjust values incrementally
Switch Control
Users navigating with switch control benefit from larger, well-spaced touch targets as they reduce the number of false activations and make scanning through controls more efficient
AssistiveTouch
Users relying on AssistiveTouch or other pointer-based assistive technologies find larger touch targets significantly easier to activate accurately
Voice Control
Adequate spacing and sizing ensure that voice commands can reliably target the correct control, especially when multiple interactive elements are present on screen
Pointer Control
When enabled, this feature visualizes the touch area, making it clear whether controls meet minimum size requirements
🧪 Testing Steps
- 1Enable VoiceOver: Settings → Accessibility → VoiceOver
- 2Navigate to interactive controls: Swipe to sliders, buttons, and other controls
- 3Verify touch target size: Attempt to tap controls with different finger positions
- 4Test with one hand: Try using controls with thumb-only navigation
- 5Check spacing: Verify adequate space between adjacent interactive elements
- 6Test slider precision: Drag sliders to ensure smooth, controllable movement
- 7Enable Pointer Control: Settings → Accessibility → Pointer Control to visualize touch areas
- 8Verify with different hand sizes: Test with multiple users or simulate different grip styles
Become a member to read this solution, and all of Ma11y.
This resource is part of our member knowledge base. Log in or create an account to unlock:
- Complete accessibility guidance and implementation examples
- Curated compliance frameworks and checklists
- Early access to new tools and features
