首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ask Apple 2022 与 SwiftUI 有关的问答(下)

阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个底部对齐的滚动视图 macOS 上会不会有糟糕的性能?...macOS APIQ:对于运行 Monterey 的 Mac,能否如何在 SwiftUI 中实现下面需求的建议:打开一个窗口该窗口中初始化数据找到所有打开的窗口确定一个窗口是否打开从不在该窗口的视图关闭一个窗口...然而,两个内容相同的视图之间的交换并不能使视图顺利地产生动画,因为两者的文本也被动画化了。我正在使用仅禁用 TextField 的替代方法,但有没有办法引导动画以使用文档中的方法?...A:解决办法:保留 TextField ,但当它不能被编辑,有条件地设置 disabled(true),当它可以编辑使用 disabled(false) 。...image-20221023171100484滚动速度Q:有好的方式 List 和 ScrollView 滑动监听滑动的 velocity 值么?

14.7K30

SwiftUI案例:自定义加载动画

SwiftUI案例:自定义加载动画 效果 目标 使用图片实现自定义加载动画 点击加载弹出层外部任意一点可关闭动画演示 开关可控制图片采用“垂直移动动画”或“垂直加自身旋转动画” 外观配置 视图的实现...ContentView.swift 案例通过间隔时间内不断控制变量 animateBall:Bool 与 animateRotation:Bool 的值来间接地实现动画效果; import SwiftUI...NavigationView { Home() //使用Home()组件定义导航栏标题 .navigationTitle("弹跳的球动画...@Environment(\.colorScheme) var scheme //使用预处理颜色组 var body: some View { //创建纵向布局视图...0.6).repeatForever(autoreverses: true)) { //0.6秒内不断切换animateBall的Bool值 //控制纵向弹跳的动画

1.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

如何判断 ScrollView、List 是否正在滚动

比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动,自动关闭已经打开的侧滑菜单。遗憾的是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。...: UIScrollView, willDecelerate decelerate: Bool)手指拖动结束后( 手指离开 ),调用此方法 SwiftUI 中,很多的视图控件是对 UIKit( AppKit...:PreferenceKey SwiftUI 中,子视图可以通过 preference 视图修饰器向其祖先视图传递信息( PreferenceKey )。...preference 与 onChange 的调用时机非常类似,只有值发生改变后才会传递数据。 ScrollView、List 发生滚动,它们内部的子视图的位置也将发生改变。

3.7K40

解析SwiftUI布局细节(二)循环轮播+复杂布局

SwiftUI 的使用例子中就是这样写的,当然我们正常的使用中这样写也没啥问题,那我们界面跳转的问题是什么呢?...通过它我们可以避免初始 View 创建 ObservableObject, 而是从环境中获取 ObservableObject,像 @EnvironmentObject,@ObservedObject...GeometryReader 的主要作用就是能够获取到父View建议的尺寸,这就是它的主要作用,要没有它我们面临的可能就是无休止的传值了,SwiftUI 既然是声明式的UI,按我的理解你就没有办法去获取某一个视图的父视图之类的...3、再提一点关于上面说的滚动视图UIKit中我们可以用UICollectionView搞定一切,但是SwiftUI中没有这个控件,我建议采用的方式是 ScrollView + HStack + VStack...循环轮播实现 ---- 总结一下循环轮播怎么实现,采用的方案就是 HStack + Gesture + Timer 的方式,这三者就能实现一个自动循环滚动或者手动滚动的轮播。

11.8K20

优化 SwiftUI List 中显示大数据集的响应效率

也就是当显示主界面菜单,列表视图已经完成了实例的创建(可以通过 ListEachRowHasID 的构造函数中添加打印命令得以证明),因此也不应是实例化列表视图导致的延迟。... SwiftUI 视图的生命周期研究[3] 一文中,我对 List 如何对子视图的显示进行优化做了一定的介绍。...当仅通过 ForEach 来指定显示标识,List 会对这些视图的显示进行优化,仅在需要显示才会对其进行实例化。...新的问题 细心的朋友应该可以注意到,运行解决方案一的代码后,第一次点击 bottom 按钮,大概率会出现延迟情况(并不会立即开始滚动)。...,并在首次滚动到列表底部也没有延迟。

9.1K20

深入了解 SwiftUI 5 中 ScrollView 的新功能

可采用 优化 SwiftUI List 中显示大数据集的响应效率[5] 一文中介绍的方式来解决。 scrollPostion(id:) 使用此修饰符可以让滚动视图滚动到特定的位置。...(视图标识) 不支持锚点设定,固定锚点为子视图的 center 正如 优化 SwiftUI List 中显示大数据集的响应效率[6] 一文所提到的,当数据集很大,也会出现性能问题。...滚动停止,容器顶端将与子视图的顶部对齐(垂直模式下)。开发者可以通过控制 scrollTargetLayout 的启用与否来开关 viewAligned 的行为。....automatic 是默认行为,紧凑的水平尺寸类中受限,否则不受限。 .always 始终限制可滚动视图的数量。 .never 不限制可滚动视图的数量。...当子视图滑入和滑出包含它的滚动视图的可视区域,scrollTransition 会对该视图应用给定的过渡动画,并在不同阶段之间平滑地过渡。

67620

WWDC 23 之后的 SwiftUI 有哪些新功能

之前的 SwiftUI 框架版本中,应该使用 @ObservedObject 属性包装器来订阅更改。现在不需要了,因为 SwiftUI 视图会自动跟踪符合 Observable 协议的类型的更改。...动画 动画始终是 SwiftUI 框架中最重要的部分。 SwiftUI 中轻松实现任何动画,但之前的框架版本缺少一些现在具有的功能。...每当用户滚动视图,它会通过设置第一个可见视图的标识来更新绑定。...还可以通过编程方式滚动到任何视图,但是,应该使用 scrollTargetLayout 视图修饰符来告诉 SwiftUI 框架在哪里查找标识以更新绑定。...它允许滚动视图中启用分页。 搜索 与搜索相关的视图修饰符也有一些很好的新增功能。例如,可以通过编程方式聚焦到搜索字段。

32320

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及滚动中返回上层视图导致应用崩溃。...原文发表我的博客 肘子的Swift记事本视图变化在前、状态变化在后 SwiftUI 中,某些可编程控件执行一定的操作,会先更新视图,待视图变化完成后再修改与其对应的状态。...当视图正在滚动返回上一层视图会导致应用崩溃这是一个由 xiaogd 我的 Discord 论坛中提出的 问题。...请至少进入第三级视图滚动当前视图视图处于滚动状态,点击 NavigationStack 左上角的 “Back” 按钮。

589110

WWDC 23 ,SwiftUI 5 和 SwiftData 的初印象

大幅改善了 ScrollView 的控制力 本次升级中,为 ScrollView 带来了新的动态滚动定位系统( 不依赖 ScrollViewReader 和显式的 id 声明)、一次性的定位系统( 视图进入后...,直接定位到滚动视图的特定位置,只能使用一次 )、全新的滚动条控制( 闪烁 )、可自定义行视图滚动区域的顶端和显示区域的显示状态( 例如可用其实现类似 watchOS 中的滚动到顶端子视图缩小的视觉效果...)、支持分页滚动( 开发者长期盼望的 )、自定义滚动内容的缩进、为滚动内容(非滚动容器)添加安全区域等众多功能。...) 并不适用于同步场景 目前功能比 Core Data 少,没有新的增加 PersistentModel 的性质与通过宏创建的 Observed 状态类似,可直接驱动视图更新(传递无需使用属性包装器)...一开始看到这些信息,我内心无比兴奋,但很快就平静下来了,最终还有些无奈。 对于绝大多数开发者来说,一旦能够应用中使用这些新功能,苹果或许又会带来更多的新诱惑。

35010

WWDC 23 ,SwiftUI 5 和 SwiftData 的初印象

大幅改善了 ScrollView 的控制力 本次升级中,为 ScrollView 带来了新的动态滚动定位系统( 不依赖 ScrollViewReader 和显式的 id 声明)、一次性的定位系统( 视图进入后...,直接定位到滚动视图的特定位置,只能使用一次 )、全新的滚动条控制( 闪烁 )、可自定义行视图滚动区域的顶端和显示区域的显示状态( 例如可用其实现类似 watchOS 中的滚动到顶端子视图缩小的视觉效果...)、支持分页滚动( 开发者长期盼望的 )、自定义滚动内容的缩进、为滚动内容(非滚动容器)添加安全区域等众多功能。...) 并不适用于同步场景 目前功能比 Core Data 少,没有新的增加 PersistentModel 的性质与通过宏创建的 Observed 状态类似,可直接驱动视图更新(传递无需使用属性包装器)...一开始看到这些信息,我内心无比兴奋,但很快就平静下来了,最终还有些无奈。 对于绝大多数开发者来说,一旦能够应用中使用这些新功能,苹果或许又会带来更多的新诱惑。

1.1K20

SwiftUI 中的内容边距

前言SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中的安全区域。许多情况下,安全区域是你希望放置内容的地方。...使用 UIKit ,我们可以访问 readableContentGuide 布局指南。从字面上看,它是另一个安全区域,适应屏幕大小,但仅适用于文本内容。...然而,正如你所见,这也将滚动条指示器从后导边缘移到了中心。使用 contentMargins我们需要一种区分视图的内容和工具栏,并仅移动内容而保持工具栏原地的方法。...幸运的是,SwiftUI 引入了新的 contentMargins 视图修饰符,使我们能够视图中移动特定类型的内容。...但是它将滚动条保留在视图的后导边缘。contentMargins 视图修饰符接受几个参数,允许我们调整其行为。第一个参数是我们想要移动的边缘。

400

Text 中实现基于关键字的搜索和定位

,并可通过按钮搜索结果中进行滚动切换?...TranscriptionRow() .id(transcription.id)}当为 ForEach ( 上面的代码使用了隐式 ForEach 形式 )中的 View 添加显式标识符后( 使用 id 修饰器),视图刷新...请阅读 优化 SwiftUI List 中显示大数据集的响应效率[6] 以及 避免 SwiftUI 视图的重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动到的...List 中,每个视图进入显示窗口都会调用它的 onAppear,每个视图退出显示窗口都会调用它的 onDisapper。.../posts/swiftUILifeCycle/[10] SwiftUI 视图中打开 URL 的若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI

4.2K30

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及滚动中返回上层视图导致应用崩溃。...视图变化在前、状态变化在后 SwiftUI 中,某些可编程控件执行一定的操作,会先更新视图,待视图变化完成后再修改与其对应的状态。这些控件基本上都是对 UIkit(AppKit)的二次包装。...当视图正在滚动返回上一层视图会导致应用崩溃 这是一个由 xiaogd 我的 Discord 论坛中提出的 问题[3]。...请至少进入第三级视图 滚动当前视图视图处于滚动状态,点击 NavigationStack 左上角的 “Back” 按钮。

26720

SwiftUI 的方式进行布局

初始状态( show == false ),视图一( 红色视图 )的底部与屏幕底部对齐,当 show == true 视图二( 绿色视图 )的底部与屏幕底部对齐。...ScrollView 会使用父视图给定的全部建议尺寸创建滚动区域,但在询问其子视图的需求尺寸只会提供理想尺寸。...SwiftUI 进行布局,当布局容器给出的建议尺寸无法满足全部子视图的需求尺寸,会根据子视图的 Priority,优先满足级别较高的视图的布局需求。...七、Transition 通过为视图设定 Transition( 转场 ),视图插入或将其移出视图SwiftUI 将自动生成对应的动画效果。...尽管当前的需求仅有两个视图,但我们仍然可以从中提炼出场景特性:垂直排列的前提下,特定状态,指定视图的底部与容器视图的底部对齐。

3.2K00

SwiftUI 的方式进行布局

初始状态( show == false ),视图一( 红色视图 )的底部与屏幕底部对齐,当 show == true 视图二( 绿色视图 )的底部与屏幕底部对齐。...ScrollView 会使用父视图给定的全部建议尺寸创建滚动区域,但在询问其子视图的需求尺寸只会提供理想尺寸。...SwiftUI 进行布局,当布局容器给出的建议尺寸无法满足全部子视图的需求尺寸,会根据子视图的 Priority,优先满足级别较高的视图的布局需求。...七、Transition 通过为视图设定 Transition( 转场 ),视图插入或将其移出视图SwiftUI 将自动生成对应的动画效果。...尽管当前的需求仅有两个视图,但我们仍然可以从中提炼出场景特性:垂直排列的前提下,特定状态,指定视图的底部与容器视图的底部对齐。

4.7K80

SwiftUI + Core Data App 的内存占用优化之旅

第一轮优化:对视图 body 值进行优化 第一轮优化中,我们会首先尝试从 SwiftUI 的角度入手。...当子视图进入惰性容器的可视区域SwiftUI 会调用它的 onAppear 闭包,子视图退出可视区域,会调用 onDisappear 闭包。...尽管从表面上来看,惰性容器仅会在视图进入可视区域才会对其进行操作,但一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图的 body 值。...本例中,子视图的 body 值中一定会包含用于显示的图片数据,因此,即使该视图已经被显示过( 滚动出显示区域 ),该视图的 body 值仍将占用不小的内存。...它保证了,只真正对数据有需求,才对数据进行获取( 实例化 )。提高了性能的同时,也尽量减少了对内存的占用。 本例中,只有视图首次出现在 List 的可视区域,Item 才会被填充数据。

1.2K10

SwiftUI 视图的生命周期研究

app 运行后进行第一次渲染SwiftUI 将依据类型树按图索骥,创建类型实例,实例的 body 根据初始状态计算视图值,并组织成视图值树。...• SwiftUI 生成视图值树,当发现没有对应的实例SwiftUI 会创建一个实例从而获取它的 body 结果。...•下文中会提到,视图值树的视图生命周期内,无论创建多少个实例都只会保留一份依赖项副本。当使用新实例SwiftUI 仍会将新的实例同原有的依赖项关联起来。...通常情况下,SwiftUI 需要渲染屏幕某个区域或需要该区域的数据配合布局,会在视图值树上创建对应的视图。当不再需要其参与布局或渲染视图将被销毁。...比如在 List 和 LazyVStack 中,Cell 视图创建之后即使滚动出屏幕不参与布局与渲染,但 SwiftUI 仍会保留这些视图的数据,直到 List 或 LazyVStack 被销毁。

4.3K30

SwiftUI + Core Data App 的内存占用优化之旅

第一轮优化:对视图 body 值进行优化 第一轮优化中,我们会首先尝试从 SwiftUI 的角度入手。...当子视图进入惰性容器的可视区域SwiftUI 会调用它的 onAppear 闭包,子视图退出可视区域,会调用 onDisappear 闭包。...尽管从表面上来看,惰性容器仅会在视图进入可视区域才会对其进行操作,但一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图的 body 值。...本例中,子视图的 body 值中一定会包含用于显示的图片数据,因此,即使该视图已经被显示过( 滚动出显示区域 ),该视图的 body 值仍将占用不小的内存。...它保证了,只真正对数据有需求,才对数据进行获取( 实例化 )。提高了性能的同时,也尽量减少了对内存的占用。 本例中,只有视图首次出现在 List 的可视区域,Item 才会被填充数据。

2.4K40

GeometryReader :好东西还是坏东西?

滚动方向上,ScrollView 会向子视图提供该维度上的全部可用尺寸。而在滚动方向上,它向子视图提供的建议尺寸为 nil。...VStack 会结合视图的优先级,它的父视图给其的建议尺寸,摆放对子视图提出最终的建议尺寸。...一些复杂的布局场景中,或者某些设备或系统版本中,布局可能需要经过几轮的协商才能获得最终稳定的结果,尤其是当视图需要依赖 GeometryReader 提供的几何信息来重新确定自己的位置和尺寸。...处理类似需求,我们应优先采用更符合 SwiftUI 的思维方式来考虑布局方案,而非依赖某个特定的几何数据进行计算。...里子和面子:不同的尺寸数据 SwiftUI 中,有一些 modifier 是布局之后,渲染层面对视图进行的调整。

45870
领券