> Markdown version of [/videos/737-unsolved-mysteries-between-usability-and-accessibility-in-ios](https://www.wearedevelopers.com/videos/737-unsolved-mysteries-between-usability-and-accessibility-in-ios). Every page supports `.md` or `Accept: text/markdown`. Links point to the HTML versions so they work for humans too. Agent guide: [/agents.md](https://www.wearedevelopers.com/agents.md). --- # Unsolved mysteries between Usability and Accessibility in iOS When ING added a custom long-press gesture, it unexpectedly broke the iOS Large Content Viewer. Discover how they engineered a non-destructive Swift solution to balance usability and accessibility. - **Speakers:** Moh’d Abualhuda, Stephan Lemnitzer - **Event:** World Congress 2023 - **Published:** October 6, 2023 - **Duration:** 25:54 - **URL:** https://www.wearedevelopers.com/videos/737-unsolved-mysteries-between-usability-and-accessibility-in-ios ## Summary When migrating their banking app's navigation from a traditional burger menu to a native UI tab bar, ING developers faced a critical clash between usability and accessibility. To improve the user experience for multi-profile customers, the team implemented a custom long-press gesture on the tab bar to quickly open a profile switcher. However, this custom interaction overrode the iOS Large Content Viewer—a native accessibility feature that magnifies tab bar icons on long-press for users relying on Dynamic Type. Initially sacrificing structural accessibility for feature usability, the team quickly realized that disabling native accessibility functions violates modern inclusive design principles, especially given the strict requirements of the European Accessibility Act.\n\nTo restore balance, they devised a programmatic solution using Swift and UIKit by configuring the UIGestureRecognizerDelegate to allow simultaneous gesture recognition. This allowed both the Large Content Viewer and the custom profile switcher to trigger. Because simultaneous triggers caused messy UI overlays, developers had to strategically intercept and temporarily disable the system's default long-press recognizer while their custom alert was active. They then increased the custom long-press duration to 1.5 seconds using dynamic listener notifications, guaranteeing visually impaired users would have ample time to read the enlarged content before the profile switching alert appeared.\n\nThis implementation underscores crucial lessons for iOS developers about extending default UIKit components without breaking their built-in accessibility. Because internal view hierarchies can change unexpectedly in future software updates, teams must engineer non-destructive overlays rather than hardcoding gesture overrides. Ultimately, integrating accessibility checks early into the testing workflow alongside functional testing empowers teams to discover structural UI clashes before finalizing a feature's design, guaranteeing software remains robust and legally compliant for all situational and physical abilities. **Keywords:** ios accessibility integration, dynamic type scaling, large content viewer, swift gesture recognition, uigesturerecognizerdelegate, uikit component customization, mobile inclusive design, european accessibility act compliance, xcode environment overrides, uitabbar usability challenges, simultaneous gesture handling, accessible software development, ui gesture synchronization, multi-profile user navigation ## Chapters 1. **Introduction to software accessibility and European compliance directives** (00:00) — Defining software accessibility as a universal service and adapting to the European Accessibility Act. 1. **Using dynamic type and large content viewer in iOS** (02:31) — How iOS tools like dynamic type enlarge text and the large content viewer displays unscalable interface elements. 1. **Conflict between custom profile switching and system accessibility tools** (04:49) — Implementing a custom long-press gesture for profile switching inadvertently overrides the default iOS large content viewer. 1. **Introducing the demo project workspace and Xcode environment** (08:08) — Setting up the iOS simulator, Swift code, and Xcode overrides reproduces the specific gesture conflict. 1. **Visualizing dynamic type scaling inside the iOS simulator** (11:13) — Testing large accessibility sizes via environment overrides reveals which user interface elements fail to scale natively. 1. **Adding a custom long press gesture to the tab bar** (13:07) — Initializing a long-press gesture on the underlying tab bar catches manual interactions but overrides system defaults. 1. **Accessing tab bar subviews and identifying the event conflict** (15:57) — Iterating over undocumented internal views of the tab bar exposes the runtime clash between custom actions and system events. 1. **Implementing gesture delegates to allow simultaneous event recognition** (18:41) — Conforming to the custom gesture recognizer delegate allows both the system content viewer and custom switch alert to fire. 1. **Synchronizing custom alert presentation with native content viewers** (20:47) — Temporarily disabling the default large content interaction during the manual sequence prevents conflicting screen overlays. 1. **Adjusting custom gesture duration to improve reading accessibility** (23:04) — Extending the minimum press duration of actions ensures disabled users have adequate time to read customized text. 1. **Balancing product usability goals with core system accessibility features** (24:37) — Integrating accessibility testing early in the software development lifecycle preserves platform conventions alongside feature requirements. ## Related Moments - [Testing and accessibility in Compose Multiplatform on iOS](https://www.wearedevelopers.com/videos/100143-the-dark-corners-of-kotlin-multiplatform) (from "The Dark Corners of Kotlin Multiplatform") - [Addressing implementation questions around accessibility patterns and audits](https://www.wearedevelopers.com/videos/507-decoding-web-accessibility-through-audit) (from "Decoding web accessibility through audit") - [Overcoming challenges in building accessible interfaces](https://www.wearedevelopers.com/videos/1589-building-interactive-async-ui-with-react-19-and-ariakit) (from "Building Interactive Async UI with React 19 and Ariakit") - [Preventing UI overlays from breaking standard keyboard accessibility](https://www.wearedevelopers.com/videos/1340-wearedevelopers-live-performance-and-ai-social-media-decline-developer-events-and-more) (from "WeAreDevelopers LIVE - Performance and AI?, Social Media decline, Developer Events and more") - [Audience questions on accessibility and framework tradeoffs](https://www.wearedevelopers.com/videos/459-extending-html-with-web-components) (from "Extending HTML with Web Components") - [Reviewing key learnings for continuous accessibility integration](https://www.wearedevelopers.com/videos/100170-continuous-accessibility) (from "Continuous Accessibility") ## Related Articles - [How Developers Can Focus on Maintaining Satisfaction With Accessibility](https://www.wearedevelopers.com/magazine/109-how-developers-can-focus-on-maintaining-satisfaction-with-accessibility) - [3 JavaScript-Free Techniques for Accordions, Dialogs, and Table of Contents](https://www.wearedevelopers.com/magazine/684-3-javascript-free-techniques-for-accordions-dialogs-and-table-of-contents) - [Dev Digest 118 - not a total recall](https://www.wearedevelopers.com/magazine/452-dev-digest-118-not-a-total-recall) - [Diversity Equity And Inclusion in Programming For Persons With Disability](https://www.wearedevelopers.com/magazine/80-diversity-equity-and-inclusion-in-programming-for-persons-with-disability) ## Related Jobs - [iOS Engineer, Swift/SwiftUI/Combine (B2C Broker)](https://www.wearedevelopers.com/jobs/ext/1611832-ios-engineer-swift-swiftui-combine-b2c-broker) at **Bitpanda** - [Founding Mobile Engineer (iOS)](https://www.wearedevelopers.com/jobs/ext/1648532-founding-mobile-engineer-ios) at **Almedia** - [Senior Web Designer, Growth](https://www.wearedevelopers.com/jobs/ext/102722-senior-web-designer-growth) at **Intercom, Inc.** - [Senior Product UI Designer](https://www.wearedevelopers.com/jobs/ext/1998621-senior-product-ui-designer) at **Almedia** - [Senior React Native Developer](https://www.wearedevelopers.com/jobs/ext/1518176-senior-react-native-developer) at **Almedia** - [Remote Senior Full-Stack Engineer](https://www.wearedevelopers.com/jobs/ext/683045-remote-senior-full-stack-engineer) at **Edge Impulse**