SwiftUI 是一个强大的框架,它简化了在苹果平台上构建用户界面的过程。SwiftUI 中的一个基本组件是 ScrollView,它允许用户通过滚动导航内容。...然而,管理滚动位置和理解滚动交互可能是一个挑战。...什么是 ScrollPositionScrollPosition 是一种类型,允许开发者以编程方式读取或更改滚动位置。虽然有用,但当用户使用手势与滚动视图交互时,它显得不够全面。...当按下按钮时,滚动视图会将其内容偏移移动到指定点。然而,我们无法读取用户通过手势交互设置的具体内容偏移。...完整代码示例分析下面是一个完整的 SwiftUI Demo,其中包含了我们刚刚讨论的 ScrollView、ScrollGeometry 和 onScrollGeometryChange 的使用示例。
前言WWDC 24 已经结束,我决定开始写一些关于 SwiftUI 框架即将推出的新特性的文章。今年,苹果继续填补空白,引入了对滚动位置更细粒度的控制。本周,我们将学习如何操作和读取滚动偏移。...为了弥补这一不足,SwiftUI 引入了新的 ScrollPosition 类型,使我们能够通过偏移量、滚动视图的边缘、视图标识符等组合滚动位置。...ScrollPosition 提供了可选的 edge、point 和 viewID 属性,以在你编程滚动时读取值。每当用户与滚动视图交互时,这些属性将变为 nil。...每当滚动视图滚动时,geometry?.contentBounds.origin 将提供当前滚动位置的偏移量。...总结在本文中,我们深入探讨了 SwiftUI 框架中 ScrollView 的新特性,特别是如何通过 ScrollPosition 类型实现更精确的滚动控制。
前言我们的滚动 API 中又有一个重要的新增功能:滚动可见性。现在,你可以获取可见标识符列表,或者快速检查并监控 ScrollView 内视图的可见性状态。...要了解有关 scrollTargetLayout 视图修饰符的更多信息,请查看我的文章《掌握 SwiftUI 中的 ScrollView:滚动几何》。...运行这个 Demo,你会看到一个带有多个文本视图的 ScrollView,当你滚动时,控制台会打印当前可见的项。...此外,在页面底部有一个视频播放器,当视频播放器出现在视口内时,它会自动播放,当其离开视口时,会自动暂停。总结今天,我们学习了如何跟踪 ScrollView 内特定视图的可见性,并监控可见标识符列表。...示例展示了如何使用 SwiftUI 的滚动可见性修饰符来增强用户体验和交互性。希望能对你有所帮助。
当 scrollClipDisable 为 false 时,滚动内容会被裁剪以适应滚动容器边界。任何超出边界的部分将不会显示。...当 scrollClipDisable 为 true 时,滚动内容不会被裁剪。它可以延伸超出滚动容器的边界,从而显示更多内容。...仅适用于 ScrollView 当 ForEach 中的数据源遵循 Identifiable 协议时,无需显式使用 id 修饰符设置标识 与 scrollTargetLayout 配合使用,可以获取当前的滚动位置...(视图标识) 不支持锚点设定,固定锚点为子视图的 center 正如 优化在 SwiftUI List 中显示大数据集的响应效率[6] 一文所提到的,当数据集很大时,也会出现性能问题。...订阅下方的 邮件列表[10],可以及时获得每周最新文章。
比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动时,自动关闭已经打开的侧滑菜单。遗憾的是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。..., willDecelerate decelerate: Bool)手指拖动结束后( 手指离开时 ),调用此方法在 SwiftUI 中,很多的视图控件是对 UIKit( AppKit )控件的二次包装。...在 ScrollView、List 发生滚动时,它们内部的子视图的位置也将发生改变。我们将以是否可以持续接收到它们的位置信息为依据判断当前是否处于滚动状态。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[9],可以及时获得每周的 Tips 汇总。
但在 SwiftUI 的发展史上,ScrollView 一直处于“残废”的状态,直到 SwiftUI 6.0 才逐渐补齐短板。下面详细讲解 SwiftUI 中 ScrollView 的进化史。...SwiftUI 1.0 可以垂直与水平滚动。...,参数3:滚动内容 ScrollView(.vertical, showsIndicators: false) { Text("SwiftUI").padding...可以控制滚动时键盘的隐藏方式。 可以控制滚动条的显隐。...5.0 新增scrollTargetBehavior修饰符,用于实现滚动时的行为,如对齐、分页。
前言 WWDC 23 已经到来,SwiftUI 框架中有很多改变和新增的功能。在本文中将主要介绍 SwiftUI 中数据流、动画、ScrollView、搜索、新手势等功能的新变化。...ScrollView 今年 ScrollView 有了很多优秀的新增功能。首先,可以使用 scrollPosition 视图修饰符来观察内容偏移量。...每当用户滚动视图时,它会通过设置第一个可见视图的标识来更新绑定。...还可以通过编程方式滚动到任何视图,但是,应该使用 scrollTargetLayout 视图修饰符来告诉 SwiftUI 框架在哪里查找标识以更新绑定。...可以使用 listRowSpacing 和 listSectionSpacing 视图修饰符来设置列表中所需的间距。
但在 SwiftUI 的发展史上,ScrollView 一直处于“残废”的状态,直到 SwiftUI 6.0 才逐渐补齐短板。下面详细讲解 SwiftUI 中 ScrollView 的进化史。...SwiftUI 1.0可以垂直与水平滚动。...:滚动内容 ScrollView(.vertical, showsIndicators: false) { Text("SwiftUI").padding(20)...可以控制滚动时键盘的隐藏方式。可以控制滚动条的显隐。...5.0新增scrollTargetBehavior修饰符,用于实现滚动时的行为,如对齐、分页。
众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及在滚动中返回上层视图时导致应用崩溃。...当视图正在滚动时返回上一层视图会导致应用崩溃这是一个由 xiaogd 在我的 Discord 论坛中提出的 问题。...请至少进入第三级视图滚动当前视图当视图处于滚动状态时,点击 NavigationStack 左上角的 “Back” 按钮。...希望 SwiftUI 开发组能尽早重视这些问题。欢迎你通过 Twitter、 Discord 频道 或博客的留言板与我进行交流。订阅下方的 邮件列表,可以及时获得每周最新文章。
众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及在滚动中返回上层视图时导致应用崩溃。...当视图正在滚动时返回上一层视图会导致应用崩溃 这是一个由 xiaogd 在我的 Discord 论坛中提出的 问题[3]。...它的复现条件如下: iOS 16 系统,在真机或模拟器上测试 点击视图列表中的按钮,可以进入下一级视图。...请至少进入第三级视图 滚动当前视图 当视图处于滚动状态时,点击 NavigationStack 左上角的 “Back” 按钮。
我采用了常见的解决方案,即旋转滚动视图和里面的每个单元格,以获得预期的倒置列表,在 iOS 上,这很有效。但在 macOS 上,它使 CPU 使用率保持在 100%。...A:你最好的选择是使用 ScrollView 和 ScrollViewReader,并在 onAppear 或新内容进来时滚动到最底部的视图。我不建议尝试旋转滚动视图。...image-20221023171100484滚动速度Q:有好的方式在 List 和 ScrollView 滑动时监听滑动的 velocity 值么?...在 SwiftUI 中,有一个从第一版开始就存在但尚未公开的纯 SwiftUI 实现的滚动容器 —— _ScrollView 。...该滚动容器提供了不少标准 ScrollView 无法提供的 API 接口,例如对手势的加强控制、容器内视图的位移、反弹控制等。
大幅改善了 ScrollView 的控制力 本次升级中,为 ScrollView 带来了新的动态滚动定位系统( 不依赖 ScrollViewReader 和显式的 id 声明)、一次性的定位系统( 在视图进入后...)、支持分页滚动( 开发者长期盼望的 )、自定义滚动内容的缩进、为滚动内容(非滚动容器)添加安全区域等众多功能。...一开始看到这些信息时,我内心无比兴奋,但很快就平静下来了,最终还有些无奈。 对于绝大多数开发者来说,一旦能够在应用中使用这些新功能,苹果或许又会带来更多的新诱惑。...订阅下方的 邮件列表[7],可以及时获得每周最新文章。...s=20 [5] 邮件列表: https://artisanal-knitter-2544.ck.page/d3591dd1e7
最近时常有朋友反映,尽管 SwiftUI 的布局系统学习门槛很低,但当真正面对要求较高的设计需求时,好像又无从下手。SwiftUI 真的具备创建复杂用户界面的能力吗?...四、ScrollView 考虑到本文需求的动画形态( 竖向滚动 ),使用 ScrollViewReader 提供的滚动定位功能,同样可以满足需求。...ScrollView 会使用父视图给定的全部建议尺寸创建滚动区域,但在询问其子视图的需求尺寸时只会提供理想尺寸。...scrollDisabled( 则让我们可以在 iOS 16+ 中屏蔽 ScrollView 的滚动手势 )。...SwiftUI 在进行布局时,当布局容器给出的建议尺寸无法满足全部子视图的需求尺寸时,会根据子视图的 Priority,优先满足级别较高的视图的布局需求。
前言自 SwiftUI 的第一个版本发布以来,它就拥有了几种容器视图。最常用的有 HStack、VStack、List 等。...Material.regular, in: RoundedRectangle(cornerRadius: 8)) .shadow(radius: 4) }}// 定义 Carousel 视图,横向滚动的自定义容器视图...return length / 3 } } // 其余子视图为横向滚动小图...if subviews.count > 1 { ScrollView(.horizontal) {...Carousel:一个横向滚动的容器视图,可以自动排列并展示内容,适合展示横向滑动的图像或视图。Magazine:一个自定义的容器视图,允许你将第一个子视图设置为大图,其他子视图横向排列展示。
最近时常有朋友反映,尽管 SwiftUI 的布局系统学习门槛很低,但当真正面对要求较高的设计需求时,好像又无从下手。SwiftUI 真的具备创建复杂用户界面的能力吗?...四、ScrollView 考虑到本文需求的动画形态( 竖向滚动 ),使用 ScrollViewReader 提供的滚动定位功能,同样可以满足需求。...ScrollView 会使用父视图给定的全部建议尺寸创建滚动区域,但在询问其子视图的需求尺寸时只会提供理想尺寸。...scrollDisabled( 则让我们可以在 iOS 16+ 中屏蔽 ScrollView 的滚动手势 )。...订阅下方的 邮件列表,可以及时获得每周的 Tips 汇总。
每年,SwiftUI 都会通过引入更多功能来赶上 UIKit。今年也不例外。让我们深入了解 SwiftUI 框架引入的新功能。....matchedTransitionSource(id: "myId", in: hero) } }}这使我们能够在 NavigationStack 内从一个视图导航到另一个视图时,...滚动位置新的 ScrollPosition 类型与 scrollPosition 视图修饰符配对,允许我们读取 ScrollView 实例的精确位置。我们还可以使用它编程地滚动到滚动内容的特定点。...State private var position: ScrollPosition = .init(point: .zero) var body: some View { ScrollView...今年的主要变化包括 @MainActor 隔离、视图集合的新重载、新的可定制标签栏体验、英雄动画、滚动位置的新功能以及新的 Entry 和 Previewable 宏。
•在 SwiftUI 生成视图值树时,当发现没有对应的实例时,SwiftUI 会创建一个实例从而获取它的 body 结果。...通常情况下,SwiftUI 在需要渲染屏幕某个区域或需要该区域的数据配合布局时,会在视图值树上创建对应的视图。当不再需要其参与布局或渲染时视图将被销毁。...比如在 List 和 LazyVStack 中,Cell 视图在创建之后即使滚动出屏幕不参与布局与渲染,但 SwiftUI 仍会保留这些视图的数据,直到 List 或 LazyVStack 被销毁。...SwiftUI 官方文档对 onAppear 和 onDisappear 的描述是:在此视图出现时执行的操作,在此视图消失时要执行的操作。这种描述与这两个修饰器在大多数场景下的行为很接近。...•ScrollView + VStack 中,即使 Cell 视图没有出现在可见区域,但它在最开始就会参与容器的布局,因此会在创建初始便触发 onAppear,但无论如何滚动,所有的 Cell 视图始终会参与布局
HomeBannerView() .environmentObject(homeViewModel) /// 服务列表...通过它我们可以避免在初始 View 时创建 ObservableObject, 而是从环境中获取 ObservableObject,像 @EnvironmentObject,@ObservedObject...3、再提一点关于上面说的滚动视图,在UIKit中我们可以用UICollectionView搞定一切,但是在SwiftUI中没有这个控件,我建议采用的方式是 ScrollView + HStack + VStack...的方式去实现,很多同行有说目前来看SwiftUI的List在数据量大的情况下性能不是特别好,采用ScrollView是个不错的方式,而且也很容易构建出来,并不是说每一个Item的位置都需要你去计算,...循环轮播实现 ---- 总结一下循环轮播怎么实现,采用的方案就是 HStack + Gesture + Timer 的方式,这三者就能实现一个自动循环滚动或者手动滚动的轮播。
在向子视图提交建议尺寸时,其处理逻辑与大多数布局容器不同。...在非滚动方向上,ScrollView 会向子视图提供该维度上的全部可用尺寸。而在滚动方向上,它向子视图提供的建议尺寸为 nil。...由于 GeometryReader 的 ideal size 为 (10,10),因此,在滚动方向上,其返回给 ScrollView 的需求尺寸即为 10。...然而,这并不意味着在使用 GeometryReader 时没有需要注意的事项。...在处理类似需求时,我们应优先采用更符合 SwiftUI 的思维方式来考虑布局方案,而非依赖某个特定的几何数据进行计算。
大幅改善了 ScrollView 的控制力 本次升级中,为 ScrollView 带来了新的动态滚动定位系统( 不依赖 ScrollViewReader 和显式的 id 声明)、一次性的定位系统( 在视图进入后...,直接定位到滚动视图的特定位置,只能使用一次 )、全新的滚动条控制( 闪烁 )、可自定义行视图在滚动区域的顶端和显示区域的显示状态( 例如可用其实现类似 watchOS 中的滚动到顶端子视图缩小的视觉效果...)、支持分页滚动( 开发者长期盼望的 )、自定义滚动内容的缩进、为滚动内容(非滚动容器)添加安全区域等众多功能。...Attribute(.unique) 并不适用于同步场景 目前功能比 Core Data 少,没有新的增加 PersistentModel 的性质与通过宏创建的 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装器...一开始看到这些信息时,我内心无比兴奋,但很快就平静下来了,最终还有些无奈。 对于绝大多数开发者来说,一旦能够在应用中使用这些新功能,苹果或许又会带来更多的新诱惑。
领取专属 10元无门槛券
手把手带您无忧上云