Guideline 4.0

Guideline 4.0 - Design: Touch Targets Too Small

Low RiskEasyTypical Fix: 2-4 hours0 Reports
Also known as:Toolbar icons are too small with no padding to expand the hit areaClose or dismiss buttons use a tiny X with no surrounding tappable regionCustom checkbox or radio button controls have a hit area matching only the visual elementRow action buttons (edit, delete) in table views are too narrow to tap reliablyInline text links have no vertical padding, making them difficult to tap on mobile

Our Take

Apple rejected your app because one or more interactive elements have tappable areas smaller than the recommended 44×44 point minimum. Small touch targets cause accidental taps on adjacent controls, frustrate users with larger fingers, and are especially problematic for users with motor accessibility needs. This rejection is common in dense list views, toolbars with many icons, and custom controls built without adequate hit areas.

Resolution Guide

01

**Ensure a minimum 44×44pt tappable area** — Apple's Human Interface Guidelines specify 44×44 points as the minimum touch target size. This applies to buttons, links, toggles, and any other interactive element.


02

**Expand hit areas without changing visual size** — You don't need to make the icon or text visually larger. In SwiftUI, use `.contentShape(Rectangle())` on a padded container:

```swift

Button(action: { dismiss() }) {

Image(systemName: "xmark")

.font(.caption)

.frame(minWidth: 44, minHeight: 44)

.contentShape(Rectangle())

}

```

03

**In UIKit, override point(inside:with:)** — For custom controls that need a larger hit area than their visual bounds:

```swift

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {

bounds.insetBy(dx: -10, dy: -10).contains(point)

}

```

04

**Add spacing between adjacent targets** — When multiple buttons sit side by side, add at least 8pt spacing between their tappable areas to prevent mis-taps.


05

**Audit with Accessibility Inspector** — Use Xcode's Accessibility Inspector to visualize tap targets and identify undersized elements.


06

**Test with large fingers in mind** — Use the simulator's touch indicator to verify tappability, but also test on a physical device with your thumb to catch real-world usability issues.


07

**Mention specific fixes in reviewer notes** — List which elements you resized and their new tap target dimensions when resubmitting.


Example Rejection Email

From:Apple App Review Team
Subject:Guideline 4.0 - Design: Touch Targets Too Small
We noticed an issue in your app that contributes to a lower quality user experience than Apple users expect: - Touch targets are too close together or too small. Specifically, the toolbar buttons in the editor screen and the row action buttons in the list view are smaller than the minimum recommended tappable area of 44x44 points, making it difficult to tap accurately. Next Steps: Please revise your app to ensure all interactive elements have adequate touch target sizes and resubmit.

Consider Appealing

Appeals are unnecessary — this is a quick fix. If you believe your touch targets already meet the 44pt minimum, measure them precisely using Accessibility Inspector and provide the measurements in your Resolution Center reply.

Generate Appeal

Before & After

Before — Rejected

// Tiny 20x20pt button — fails Apple's 44pt minimum

Button(action: { dismiss() }) {

Image(systemName: "xmark")

.font(.system(size: 12))

}

.frame(width: 20, height: 20)

After — Approved

// Visual size stays small, tappable area meets 44pt minimum

Button(action: { dismiss() }) {

Image(systemName: "xmark")

.font(.system(size: 12))

.frame(minWidth: 44, minHeight: 44)

.contentShape(Rectangle())

}

What changed: The icon remains visually small (12pt), but the tappable area expands to 44×44 points via .frame(minWidth:minHeight:) and .contentShape(Rectangle()). This satisfies Apple's requirements without changing the design.

Before — Rejected

// UIKit: button with intrinsicContentSize too small

class SmallButton: UIButton {

override var intrinsicContentSize: CGSize {

return CGSize(width: 24, height: 24)

}

}

After — Approved

// UIKit: minimum touch target enforced via intrinsicContentSize

class AccessibleButton: UIButton {

override var intrinsicContentSize: CGSize {

let size = super.intrinsicContentSize

return CGSize(

width: max(size.width, 44),

height: max(size.height, 44)

)

}

}

What changed: Override intrinsicContentSize to enforce a 44×44pt minimum while preserving the natural content size when it's already large enough. This ensures Auto Layout always allocates adequate tap target space.

Community Solutions · 0

Sign in to share your solution.

More Guideline 4 (Design) rejections

View all Guideline 4 rejections