R4.08.2consistency by adoptiondesign

Consistency is gained by using system controls, not by mimicking their appearance

Aliases: adopt system controls · fake native · visual mimicry

What it is

On Apple platforms, consistency is not drawing a switch that looks like the system switch. It is using the system switch. What people learned in other apps is the control’s behavior: the swipe, the long press, how VoiceOver names it, how focus moves. Adopting the real control imports that already-paid learning. A custom view that only copies the look is fake native: familiar in a still, a different state machine in the hand. Call the principle consistency by adoption.

This is not about how deep the navigation stack goes, and not about whether brand color may enter the content area. It asks only: is this operable object a system object, or a picture of one.

Why it happens

A system control is a behavior contract that upgrades with the OS: dark mode, right-to-left, assistive technologies, pointer shape, focus ring. A painted look freezes pixels at the mockup’s vintage; the contract does not ship with that paint. People swipe as the platform taught them; the control only handles taps. VoiceOver says “button” instead of “switch.” System bold text arrives; the custom thumb stays a fixed number of points.

Consistency is sharing the contract, not sharing the sticker. Mimicry is tempting because it scores in still-frame review: side-by-side screenshots nearly match. The mismatch appears on the first non-tap action, the first system-setting change, the first assistive pass. The still manufactures an illusion of sameness; runtime takes it apart.

Where it stops holding

Unique functions with no system counterpart — Bézier handles on a canvas, an instrument keyboard — should be custom; forcing a switch or slider is worse. Games and immersive full-screen that leave the system shell entirely: adoption governs the system-provided layer (share sheet, permission dialog), not the inside of the canvas. On iOS, the web can host only a thin set of system controls; “adoption” then degrades to using the platform’s interaction semantics rather than UIKit instances. A branded control that still is the system object and only recolors it still counts as adoption. Rewriting the state machine is a different product language.

Applying it

  • Switches, sliders, segmented controls, navigation-bar buttons, share and system sheets: use the system object by default. Draw them in mockups to annotate content, not so engineering can repaint them pixel-for-pixel.
  • Before drawing a custom control, list the behaviors the system already ships (accessibility role, appearance updates, orientation). Confirm the custom view will implement all of them, not just the look.
  • Keep brand difference in the content layer — illustration, empty state, accent — not in the silhouette of frame controls.
  • Verify by turning on bold text, dark mode, and VoiceOver, then walking every control that “looks system.” Every place the look survives and the behavior drops off is mimicry, not adoption. Cross-check: the same action in Settings — does the app use the same gesture and feedback.

Related

  • Same group: R4.08.1 Content comes before decoration; the interface yields to the information it carries · R4.08.3 Direct manipulation and live feedback are treated as the default expectation
  • Adjacent: R4.01 Apple platform conventions · R4.06 Platform convention vs brand consistency · R4.14 Consistency cost of cross-platform frameworks
  • Search terms: consistency by adoption · system control · fake native

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/R4.08.2