SwiftUI 是一个强大的框架,它简化了在苹果平台上构建用户界面的过程。SwiftUI 中的一个基本组件是 ScrollView,它允许用户通过滚动导航内容。...在此示例中,我们使用 CGFloat 来跟踪内容偏移的 Y 轴。转换闭包:从 ScrollGeometry 实例中提取所需信息。...完整代码示例分析下面是一个完整的 SwiftUI Demo,其中包含了我们刚刚讨论的 ScrollView、ScrollGeometry 和 onScrollGeometryChange 的使用示例。...你可以在 Xcode 中运行这个项目来观察其效果。...总结今天,我们探讨了 SwiftUI 中的新 ScrollGeometry 类型和 onScrollGeometryChange 视图修饰符。
为了弥补这一不足,SwiftUI 引入了新的 ScrollPosition 类型,使我们能够通过偏移量、滚动视图的边缘、视图标识符等组合滚动位置。...ScrollPosition 类型上的 isPositionedByUser 属性允许我们了解何时用户手势移动滚动视图内容。...我们将这个偏移量存储在 scrollOffset 状态属性中,并在视图底部显示当前的滚动位置。...总结在本文中,我们深入探讨了 SwiftUI 框架中 ScrollView 的新特性,特别是如何通过 ScrollPosition 类型实现更精确的滚动控制。...希望这些内容对你有所帮助。
前言我们的滚动 API 中又有一个重要的新增功能:滚动可见性。现在,你可以获取可见标识符列表,或者快速检查并监控 ScrollView 内视图的可见性状态。...要了解有关 scrollTargetLayout 视图修饰符的更多信息,请查看我的文章《掌握 SwiftUI 中的 ScrollView:滚动几何》。...对于这些情况,SwiftUI 框架引入了 onScrollVisibilityChange 视图修饰符,你可以将其附加到 ScrollView 内的任何视图上以处理其可见性。...pause() } } }}上例定义了 VideoPlayerView 视图,该视图在其可见时自动播放视频内容。...pause() } } }}在上述示例中,我们定义了阈值,这意味着 SwiftUI 将在视图至少有 10% 可见时运行操作闭包。
在 SwiftUI 5.0 中,苹果大幅强化了 ScrollView 功能。新增了大量新颖、完善的 API。本文将对这些新功能进行介绍,希望能够让它们更多、更早的帮助到有需要的开发者。...应将此修饰符应用于 ScrollView 中包含主要重复内容的布局容器,如 LazyHStack 或 VStack。...NamedCoordinateSpace.scrollView 在 SwiftUI 5 中,苹果新增了 NamedCoordinateSpace 类型,方便用户命名坐标系,并提供了预置的 .scrollView...总结 我完全没有想到,在 SwiftUI 5 中,苹果对 ScrollView 进行了全面增强。值得赞赏的是,他们不仅提供了一些一直期待的功能,而且在 API 的设计和实现完成度上都非常出色。...就我个人而言,在 SwiftUI 5 中,ScrollView 的原生方案已经能够满足大多数需求,因此我们将看到更多人采用 ScrollView + LazyStack 的组合方式。
介绍 ScrollView 即滚动视图,在 iOS 开发中扮演着非常重要的角色。...但在 SwiftUI 的发展史上,ScrollView 一直处于“残废”的状态,直到 SwiftUI 6.0 才逐渐补齐短板。下面详细讲解 SwiftUI 中 ScrollView 的进化史。...,参数3:滚动内容 ScrollView(.vertical, showsIndicators: false) { Text("SwiftUI").padding...新增scrollTargetLayout修饰符,用于告知 ScrollView 偏移的参照者,常用于修饰 ScrollView 中的各种 Stack。...可视内容的改变。
介绍ScrollView 即滚动视图,在 iOS 开发中扮演着非常重要的角色。...但在 SwiftUI 的发展史上,ScrollView 一直处于“残废”的状态,直到 SwiftUI 6.0 才逐渐补齐短板。下面详细讲解 SwiftUI 中 ScrollView 的进化史。...ScrollView(.vertical, showsIndicators: false) { Text("SwiftUI").padding(20)...新增scrollTargetLayout修饰符,用于告知 ScrollView 偏移的参照者,常用于修饰 ScrollView 中的各种 Stack。...可视内容的改变。
前言SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中的安全区域。在许多情况下,安全区域是你希望放置内容的地方。...从字面上看,它是另一个安全区域,适应屏幕大小,但仅适用于文本内容。不幸的是,我们在 SwiftUI 中无法访问 readableContentGuide。...你可以在 Playground 中运行此代码以查看结果。总结本文介绍了 SwiftUI 中的内容边距管理,通过对比安全区域的概念,解释了内容边距的重要性。...随后,通过介绍 UIKit 中的 readableContentGuide 布局指南以及 SwiftUI 中的 safeAreaPadding 视图修饰符,展示了在 iPad 上适配内容边距的方法。...最后,引入了 contentMargins 视图修饰符,并详细解释了其用法和参数,以及如何使用它来管理内容边距。通过本文,读者可以更好地理解并掌握 SwiftUI 中内容边距的管理技巧。
背景 最近做 SwiftUI 项目,之前对于 navigationDestination 的用法理解不太深刻,觉得很是难用,最近发现了正确的使用方式,这里记录一下。...在具体的NavCoordinator中,声明一个枚举管理这个页面下的所有子界面。然后创建NavCoordinator,实现push、pop、popToRoot和navigator方法。...} label: { Text("BackToC") } } } } 这样所有的跳转其实都是在根类 B 和 C 中管理
ZStack import SwiftUI struct SKZStack :View { var body: some View{ ZStack { Text(...从图的观察我们知道,ZStack是大家在水平的规则上一样,然后进行z方向的叠加,理解起来就是我们是个显示屏是平面,在这个基础上来个垂直于屏幕的方向上设置个轴线按次序把UI叠放在上面 VStack import SwiftUI...这个很明显啦,就是大家按次序从上往下按照先后顺写在一个平面排列起来,有点类似排队的感觉 HStack import SwiftUI struct SKHStack:View { var body
你只需创建一个 Card,并使用闭包提供内容。通过在 Card 容器视图内嵌入不同的视图,你可以在应用的多个屏幕中复用它。...想了解更多关于 @ViewBuilder 闭包的内容,可以查看我关于 “SwiftUI 中 @ViewBuilder 的强大功能” 的文章。...SwiftUI 引入了新的 API,允许我们重新组合视图。例如,我们可以从通过 @ViewBuilder 闭包构建的内容视图中提取子视图,并根据需要将它们放置。...你可以在应用中的多个地方使用该容器来保持一致的样式。Carousel:一个横向滚动的容器视图,可以自动排列并展示内容,适合展示横向滑动的图像或视图。...运行这个Demo此代码展示了如何在 SwiftUI 中构建自定义的容器视图,灵活地将不同的布局封装在容器中,以便在应用中多次复用这些布局模式。
前言 WWDC 23 已经到来,SwiftUI 框架中有很多改变和新增的功能。在本文中将主要介绍 SwiftUI 中数据流、动画、ScrollView、搜索、新手势等功能的新变化。...在之前的 SwiftUI 框架版本中,应该使用 @ObservedObject 属性包装器来订阅更改。现在不需要了,因为 SwiftUI 视图会自动跟踪符合 Observable 协议的类型的更改。...环境中。...动画 动画始终是 SwiftUI 框架中最重要的部分。在 SwiftUI 中轻松实现任何动画,但之前的框架版本缺少一些现在具有的功能。...ScrollView 今年 ScrollView 有了很多优秀的新增功能。首先,可以使用 scrollPosition 视图修饰符来观察内容偏移量。
比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动时,自动关闭已经打开的侧滑菜单。遗憾的是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。...目前 SwiftUI 在内部的实现上去 UIKit( AppKit )化很明显,比如,本节介绍的方法在 SwiftUI 4.0 中已经失效方法二:Runloop我第一次接触 Runloop 是在学习 Combine...在 SwiftUI 中,子视图可以通过 preference 视图修饰器向其祖先视图传递信息( PreferenceKey )。...判断的准确度没有前两种方式高当可滚动组件中的内容出现了非滚动引起的尺寸或位置的变化( 例如 List 中某个视图的尺寸发生了动态变化 ),本方式会误判断为发生了滚动,但在视图的变化结束后,状态会马上恢复到滚动结束滚动开始后
GeometryReader 自 SwiftUI 诞生之初就存在,它在许多场景中扮演着重要的角色。然而,从一开始就有开发者对其持负面态度,认为应尽量避免使用。...官方文档中的“定义其内容( defines its content )”这一表述容易让人误以为 GeometryReader 的主要功能是主动影响子视图,或者说其获取的几何信息主要用于子视图,但实际上,...例如,如果我们想在 ScrollView 中以 16:9 的比例显示图片(即使图片自身的比例与此不符): struct GeometryReaderInScrollView: View { var...请阅读 用 SwiftUI 的方式进行布局[9] 和 在 SwiftUI 中实现视图居中的若干种方法[10] 两篇文章,以了解面对同一个需求,SwiftUI 有多种布局手段。...在 SwiftUI 布局 —— 尺寸( 下 )[11] 一文中,我们探讨过有关尺寸的“里子和面子”的问题。
如何在SwiftUI中实现interactiveDismissDisabled 如想获得更好的阅读体验,可以访问我的博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...3.0中新增功能——interactiveDismissDisabled的增强版;如何创建更SwiftUI化的功能扩展。...去年9月,我在文章【在SwiftUI中制作可以控制取消手势的Sheet】[3]中介绍了健康笔记2.0[4]版本的Sheet控制实现方法。...在今年推出的SwiftUI 3.0版本中,苹果添加了一个新的View扩展:interactiveDismissDisabled,该扩展实现了上面的第一个要求——通过代码控制是否允许手势取消Sheet。...在WWDC 2021 观后感[6]一文中,我们已经探讨过SwiftUI3.0将会影响非常多的第三方开发者编写SwiftUI扩展的思路和实现方式。
前言WWDC 24 已经到来,我们有很多内容要讨论。每年,SwiftUI 都会通过引入更多功能来赶上 UIKit。今年也不例外。让我们深入了解 SwiftUI 框架引入的新功能。...英雄动画SwiftUI 引入了 matchedTransitionSource 和 navigationTransition,我们可以在任何 NavigationLink 实例中配对使用。...滚动位置新的 ScrollPosition 类型与 scrollPosition 视图修饰符配对,允许我们读取 ScrollView 实例的精确位置。我们还可以使用它编程地滚动到滚动内容的特定点。...State private var position: ScrollPosition = .init(point: .zero) var body: some View { ScrollView...框架的下一版本包括许多新 API,如窗口推送、TextField 和 TextEditor 视图中的文本选择观察、搜索焦点监控、自定义文本渲染、新的 MeshGradient 类型等等,我无法在一篇文章中涵盖所有内容
学完本教程后,你就可以在你的 App 中把这种 3D 效果加入任何自定义的 SwiftUI 视图。下面我们来开始本教程的学习。 入门 首先,创建一个新的 SwiftUI 视图。...在 ScrollView 嵌套中添加一个 HStack,如下: var body: some View { ScrollView(.horizontal, showsIndicators: false...var body: some View { ScrollView(.horizontal, showsIndicators: false) { HStack(alignment:...var body: some View { ScrollView(.horizontal, showsIndicators: false) { HStack(alignment:...Effect: https://levelup.gitconnected.com/swiftui-3d-scroll-effect-fa5310665738
SwiftUI 中布局的工作原理 ---- 所有的 SwiftUI 布局都有三个简单的步骤,理解这些步骤是每次获得优秀布局的关键。步骤如下: 父视图提供一个大小并询问其子视图的大小。....background(Color.red) } } 你会看到背景色紧紧围绕着文本本身——它只占用足够的空间来适应我们提供的内容。 现在,想想这个问题:ContentView有多大?...如您所见,ContentView的主体(它呈现的内容)是一些带有背景色的文本。所以ContentView的大小总是和它的主体大小一样,不多不少。...在我们的简单background()示例中,这意味着ContentView中的顶层视图是背景,而内部是文本。...如果我们把这个放到三步布局系统中,我们最终会有一个类似这样的对话: SwiftUI:“嘿,ContentView,你自己拥有整个屏幕——你需要多少?
有关这方面的内容,请参阅 SwiftUI 布局 —— 尺寸( 下 )[4] 一文中“面子和里子”章节。...有关建议尺寸、需求尺寸等内容,请参阅 SwiftUI 布局 —— 尺寸( 上 )[5] 一文 三、NameSpace 从 3.0 版本( iOS 15 )开始,SwiftUI 提供了新的 NameSpace...这意味着,在 ScrollView 中,子视图最好明确的设定尺寸( 提出明确地需求尺寸 )。因此,在上面的代码中,需要通过屏幕高度和视图一的高度差来计算上方的空白站位视图高度。...scrollDisabled( 则让我们可以在 iOS 16+ 中屏蔽 ScrollView 的滚动手势 )。...有关转场动画的更多内容,请参阅 SwiftUI 的动画机制[8] 一文 八、Layout 协议 在 4.0 版本中,SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定的场景,创建自定义布局容器
有关这方面的内容,请参阅 SwiftUI 布局 —— 尺寸( 下 ) 一文中“面子和里子”章节。...有关建议尺寸、需求尺寸等内容,请参阅 SwiftUI 布局 —— 尺寸( 上 ) 一文 三、NameSpace 从 3.0 版本( iOS 15 )开始,SwiftUI 提供了新的 NameSpace...这意味着,在 ScrollView 中,子视图最好明确的设定尺寸( 提出明确地需求尺寸 )。因此,在上面的代码中,需要通过屏幕高度和视图一的高度差来计算上方的空白站位视图高度。...scrollDisabled( 则让我们可以在 iOS 16+ 中屏蔽 ScrollView 的滚动手势 )。...有关转场动画的更多内容,请参阅 SwiftUI 的动画机制 一文 八、Layout 协议 在 4.0 版本中,SwiftUI 增加了 Layout 协议,通过该协议,开发者可以针对特定的场景,创建自定义布局容器
下面我们将学习如何通过使用 accessibilityChartDescriptor 视图修饰符为任何 SwiftUI 视图构建音频表示,呈现类似自定义条形图视图或图像的图表。...DataPoint 结构体 让我们从在 SwiftUI 中构建一个简单的条形图视图开始,该视图使用垂直条形显示一组数据点。...ContentView 结构体 我们能够在 SwiftUI 中轻松构建条形图视图。接下来让我们尝试使用带有示例数据的新 BarChartView。...这些音调代表数组中的数据。 实现协议 现在,我们可以讨论在 BarChartView 中实现此功能的方法。...AXChartDescriptor 类型的实例表示我们图表中的数据,以 VoiceOver 可以理解和交互的格式呈现。
领取专属 10元无门槛券
手把手带您无忧上云