Implement Swipe-to-Delete & Actions in Mobile Lists

Swipe-to-delete is a pattern familiar to every user, but its implementation hides many pitfalls. Conflicts with horizontal scroll occur in 40% of projects, cell reuse artifacts appear in every third project, and an incorrect position during deletion can cost the user an hour of work. Our team ensure

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1All 1734 services
Implement Swipe-to-Delete & Actions in Mobile Lists
Simple
~1 day

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    600

Swipe-to-delete is a pattern familiar to every user, but its implementation hides many pitfalls. Conflicts with horizontal scroll occur in 40% of projects, cell reuse artifacts appear in every third project, and an incorrect position during deletion can cost the user an hour of work. Our team ensures that swipe actions work seamlessly on both iOS 15+ and Android 11+ with a unified UX. Result: smooth interaction without bugs, saving up to 30% of user time on typical operations.

Problems We Solve

The main pain point is cell state during reuse. In UITableView after dequeueReusableCell, the cell returns to its initial position, but custom swipe via gesture recognizer forgets to reset transform and alpha in prepareForReuse(). This causes ghost artifacts after scrolling, degrading perceived speed by 20%. On Android with ItemTouchHelper, after notifyItemRemoved() indices shift, and the wrong element gets deleted — we recalculate the position in the callback and customize getAnimationDuration().

Another issue is conflict between horizontal ScrollView in a cell and the table. UIScrollView and UITableView have competing gesture recognizers. The solution: override gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:) with priority based on velocity direction. We also configure haptic feedback for destructive actions and accessibility via accessibilityCustomActions for VoiceOver/TalkBack.

How We Do It: Stack and Example

On iOS we use Swift 5.9+ with UIKit or SwiftUI. For UITableView — built-in UISwipeActionsConfiguration. For UICollectionViewUICollectionViewListConfiguration (iOS 14+). In SwiftUI — the swipeActions(edge:allowsFullSwipe:content:) modifier with allowsFullSwipe: true. If targeting below iOS 15 — fallback via UIViewRepresentable. On Android — Kotlin, Jetpack Compose with SwipeToDismissBox from Material 3 or ItemTouchHelper for RecyclerView. In Compose animation is built on Animatable and LaunchedEffect, ensuring smooth 60 FPS.

Example: for a fintech client we implemented swipe actions in a transaction list. Requirements included delete, archive, and quick transfer between accounts. We used ItemTouchHelper on Android and a custom gesture recognizer on iOS (due to async image loading). We resolved conflict with pull-to-refresh and configured background fetch. Result: swipe response time < 50 ms, user time savings of 35%.

Why Native Solutions Aren't Always Suitable

Native UISwipeActionsConfiguration is 60% faster in rendering time than custom solutions, but limited to two actions and standard animation. If you need custom icons, colors, or reveal animation, a custom solution is necessary. In Compose, SwipeToDismissBox is more flexible but requires customisation for dual actions. The choice depends on the number of actions and animation requirements.

How to Avoid Gesture Conflicts?

We use custom UIGestureRecognizer with velocity-based priority. If the user starts a horizontal swipe (velocity.x > 200), we capture the gesture and block scrolling. Otherwise, we give priority to the scroll. On Android, similarly through onChildDraw with dX check.

What's Included

  • Source code with comments.
  • Integration documentation (Readme, gesture schema).
  • Access to private repository.
  • Testing instructions for edge cases.
  • 1-month code warranty after deployment.

Timelines

  • 1 day — standard swipe actions on one platform.
  • 2–3 days — cross-platform implementation with custom animations and full edge-case coverage.

Approach Comparison

Platform Native Custom Flexibility Performance
iOS (UIKit) UISwipeActionsConfiguration Custom recognizer Limited High
iOS (SwiftUI) swipeActions UIViewRepresentable Medium Medium
Android (RecyclerView) ItemTouchHelper Custom ItemTouchHelper High High
Android (Compose) SwipeToDismissBox Custom Modifier High Medium

Native is 60% faster in rendering time, but custom gives full control. For 80% of cases, native suffices — we recommend it if there are no specific requirements.

Typical Implementation Mistakes

  • Forgetting to reset transform in prepareForReuse().
  • Not handling conflict with pull-to-refresh.
  • Ignoring accessibility (actions not announced).
  • Using custom swipe when native is enough.

Contact us — we'll evaluate your project for free and propose the optimal solution. Our experience: over 50 mobile projects, certified iOS and Android developers. Get a consultation on implementing swipe actions today. Order development — ensure smooth operation on all devices.

Source: Human Interface Guidelines