<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh" -->

---
title: ScrollView snapping in SwiftUI | daily.dev
description: SwiftUI's ScrollView uses velocity-based deceleration by default, which can leave content partially visible. The scrollTargetBehavior(_:) modifier enables two...
canonical: https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: ScrollView snapping in SwiftUI | daily.dev
og:description: SwiftUI's ScrollView uses velocity-based deceleration by default, which can leave content partially visible. The scrollTargetBehavior(_:) modifier enables two...
og:url: https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh
og:image: https://api.daily.dev/og/posts/jnzBLGomh.png
og:image:alt: ScrollView snapping in SwiftUI
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# ScrollView snapping in SwiftUI

**[Nil Coalescing](https://daily.dev/sources/nilcoalescing)** · 6 min read · 0 upvotes · 0 comments

## Summary

SwiftUI's ScrollView uses velocity-based deceleration by default, which can leave content partially visible. The scrollTargetBehavior(_:) modifier enables two snapping modes: paging (snaps to the container's visible region) and viewAligned (snaps to individual views). Paging requires zero spacing on LazyHStack and may need ignoresSafeArea for horizontal layouts. viewAligned requires marking the layout container with scrollTargetLayout() and handles safe area insets better. A key gotcha: oversized items wider than the visible region break viewAligned snapping, requiring a custom ScrollTargetBehavior for those cases. These APIs are available since iOS 17.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://nilcoalescing.com/blog/ScrollViewSnappingInSwiftUI>

## Similar posts on daily.dev

- [Taming Row Height and Spacing Jumps in SwiftUI List with a Custom Layout](https://daily.dev/posts/taming-row-height-and-spacing-jumps-in-swiftui-list-with-a-custom-layout-kjhlldkzi) · Fatbobman · 0 upvotes · 0 comments

---

Tags: [#ios](https://daily.dev/tags/ios), [#swift](https://daily.dev/tags/swift), [#swiftui](https://daily.dev/tags/swiftui)

[View this post on daily.dev](https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"ScrollView snapping in SwiftUI","url":"https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh"},"datePublished":"2026-08-02T07:15:04.969Z","dateModified":"2026-08-02T07:33:28.428Z","description":"SwiftUI's ScrollView uses velocity-based deceleration by default, which can leave content partially visible. The scrollTargetBehavior(_:) modifier enables two...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/879659c75db8f0412a9d925d4a827198?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/879659c75db8f0412a9d925d4a827198?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Nil Coalescing","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Nil Coalescing","logo":"https://media.daily.dev/image/upload/s--rcEu6sag--/f_auto,q_auto/v1785654899/logos/nilcoalescing?_a=BAMAMicg0","url":"https://daily.dev/sources/nilcoalescing"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/scrollview-snapping-in-swiftui-jnzblgomh","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ios,swift,swiftui","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Nil Coalescing","item":"https://daily.dev/sources/nilcoalescing"},{"@type":"ListItem","position":3,"name":"ScrollView snapping in SwiftUI"}]}
```

