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

Ask Apple 2022 与 SwiftUI 有关问答(上)

是否有任何建议用来检测列表选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表选择一个选项 )?...只有将这些变量重构到视图模型中去这一种方式?A:如果在同一个视图中,有多个相互关联 @State 属性,将他们提取到一个结构中或许是好选择。...2、视图出现在 UITabBarController 中,推荐执行代码方法是什么?...在常规宽度下,我们在详细视图中一个带有导航堆栈侧边栏。在紧凑宽度下,我们有一个标签栏,每个标签都有一个导航堆栈。...我在 ContentView 中使用了 enviromentObject 作为所有视图封装器,在每个视图中,我使用 @EnviromentObject 来访问这些数据,对于这种情况,这是最好方法吗?

12.2K20

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

因此,如果你正在创建一个视图来显示可滚动内容,并可能进行选择操作,那么在 iOS 和 macOS 上使用 List 将有最好体验。...视图性能优化Q:面对复杂用户界面,控制视图中更新范围最佳做法是什么( 以避免不需要转发以及重复计算 )。...快速检索数组元素Q:为什么没有简单方法将 TABLE 选择行映射到提供表内容数组元素上?似乎唯一方法是在数组中搜索匹配 id 值,这对于大表来说似乎效率很低。...我采用了常见解决方案,即旋转滚动视图和里面的每个单元格,以获得预期倒置列表,在 iOS 上,这很有效。但在 macOS 上,它使 CPU 使用率保持在 100%。...A:你最好选择是使用 ScrollView 和 ScrollViewReader,并在 onAppear 或新内容进来时滚动到最底部视图。我不建议尝试旋转滚动视图

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

SwiftUI 中实现视图居中若干种方法

欢迎大家在 Discord 频道[2] 中进行更多地交流将某个视图在父视图中居中显示是一个常见需求,即使对于 SwiftUI 初学者来说这也并非难事。...HStack、VStack 在进行布局,会为每个视图提供四种不同建议模式( 最小、最大、明确尺寸以及未指定 ),如果子视图在不同模式下返回需求尺寸是不一样,则意味着该视图是可变尺寸视图。...尺寸为 Color 和 Text 两者最大宽度 x 最大高度,该尺寸是一个可变尺寸( 取决于 Text 文本长度 ) ZStack 给出建议宽度大于 300 ,Text 可利用宽度将超过...我为本文这种通过多种方法来解决一个问题方式添加了【小题大作】标签,目前使用该便签文章还有:在 Core Data 中查询和使用 count 若干方法[6]、在 SwiftUI 视图中打开 URL.../[7] 在 SwiftUI 视图中打开 URL 若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI/[8] Twitter: https

6.6K40

探讨 SwiftUI几个关键属性包装器

@State 用于管理视图私有状态。 它主要用于存储值类型数据(与视图生命周期一致)。 典型应用场景 需要因视图数据变化而触发视图更新,@State 是理想选择。...它适用于需要在子视图中直接修改父视图中数据情况。 注意事项 应当谨慎使用 @Binding,视图只需响应数据变化而无需修改时,无需使用 @Binding。...相关内容请阅读:SwiftUI Binding Extensions[9]。 // 将一个 Binding<V?...它提供了一种便捷方式在不同视图层级中引入共享数据,而无需显式地通过每个视图构造器传递。 典型应用场景 需要在多个视图间共享同一个数据模型,如用户设置、主题或应用状态。...需要使用系统提供一些方法,比如 dismiss、openURL( 通过 struct callAsFunction 封装方法 )。

18710

架构之路 (七) —— iOS AppSOLID原则(一)

在设计将在代码中不同位置使用协议最好将该协议分解为多个较小部分,每个部分都有特定作用。这样,客户端只依赖于他们需要协议部分。 5....这是应用程序中一个视图,您可以在其中选择要显示费用报告类型:每日或每月。 假设您想添加本周报告。...除了使用报表数据源类之外,它们也相同。 这两种情况都使用了大量重复代码——必须有更好方法! 一种选择是定义一个单一数据源类,它使用一系列日期来获取条目,然后有一个单一视图来显示这些条目。...从弹出菜单中选择Refactor ▸ Rename...。 您在一处编辑名称,Xcode 会更改它出现其他任何地方,包括文件名。 完成名称编辑后,单击右上角Rename。...此外,如果您决定放弃 Core Data 并使用其他一些存储解决方案,依赖倒置将让您轻松更换底层模型实现,而无需更改视图中任何代码。 您想要创建单元测试,同样概念也适用。

4.7K10

StateObject 与 ObservedObject

被订阅可观察对象通过内置 Publisher 发送数据( 通过 @Published 或直接调用其 objectWillChange.send 方法 ),StateObject 和 ObservedObject...{ Text("Hello \(store.username)") }} SwiftUI 开始创建以该描述生成视图,大致会进行如下步骤:创建一个 DemoView 实例进行与该视图有关一些准备工作...视图加载到视图SwiftUI 会根据当时采用实例将需要绑定状态( @State、@StateObject、onReceive 等 )托管到 SwiftUI 托管数据池中,之后无论实例再被创建多少次...在 SwiftUI视图添加到视图树上,调用 _makeProperty 方法将需要持有的订阅关系、强引用等信息保存到 SwiftUI 内部数据池中。...了解它们内涵不仅有助于选择合适应用场景,同时也对掌握 SwiftUI 视图存续机制有所帮助。希望本文能够对你有所帮助。

2.4K20

SwiftUI 与 Core Data —— 安全地响应数据

本文将介绍可能在视图中产生严重错误原因,如何避免,以及在保证视图对数据变化实时响应前提下如何为使用者提供更好、更准确信息。由于本文会涉及大量前文中介绍技巧和方法,因此最好一并阅读。...例如,当你创建一个带有字符串属性新对象,初始值( 在没有默认值情况下 )是 nil,这在对象被验证之前( 通常在 save )是没有问题。...修改为 String )声明代码可以部分改善在视图中使用托管对象友善度。相较于将具有默认值属性声明为可选值类型( 例如 String ),数值属性声明则更加令人困惑。...也就是说,如果一个用于显示托管对象实例数据视图被销毁了,那么假如没有其他视图或代码引用视图中显示托管对象实例,托管上下文将从内存中将这些数据占用内存释放掉。...在上节演示中,数据被删除后( 通过 onAppear 闭包中延迟操作 ),NavigationView 会自动返回到根视图中。在这种情况下,持有该数据视图将伴随着数据删除一并消失。

3.2K20

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

transcription 中结果值已经为高亮显示值( 当前选择高亮位置 ),且下一个序号位置仍在同一个 transcription 中,那么将放弃滚动。...onAppear,每个视图退出显示窗口都会调用它 onDisapper。...了解更多内容,请阅读 SwiftUI 视图生命周期研究[9] 一文优先定位于最靠近屏幕中央搜索结果:/// 从 List 当前显示中 transcription 中就近选择 match positionprivate...视图中打开 URL 若干方法[10] 一文,了解更多有关 OpenURLAction 内容创建体验感优秀搜索条使用 safeAreaInset 添加搜索栏在没有 safeAreaInset 修饰器时候.../posts/swiftUILifeCycle/[10] 在 SwiftUI 视图中打开 URL 若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI

4.2K30

SwiftUI 与 Core Data —— 数据获取

本文中我们将探讨在 SwiftUI 视图中批量获取 Core Data 数据方式,并尝试创建一个可以使用 mock 数据 FetchRequest。...由于本文会涉及大量 前文[1] 中介绍技巧和方法,因此最好一并阅读。... SwiftUI视图存续期中重新创建视图描述实例,自定义类型也将一并重新创建在视图存续期中,如果 SwiftUI 创新创建了视图描述实例,那么无论视图描述( 符合 View 协议 Struct...不可在 update 方法中同步地改变引发视图更新数据与 SwiftUI视图中更新 Source of truth 逻辑一致,在一个视图更新周期中,不能对 Source of truth 再度更新...image-20221203185621897允许在构造方法中不提供 NSFetchRequest当在视图中使用 @FetchRequest ,我们必须在声明 FetchRequest 变量设置 NSFetchRequest

4.6K30

深度解读 Observation —— SwiftUI 性能提升新途径

本文将采取问答方式,全面而详尽地探讨 Observation 框架,内容涉及其产生原因、使用方法、工作原理以及注意事项等。...在视图中 @Obervable 与 ObservableObject 可以共存吗 可以。在一个视图中,可以同时存在以不同方式声明可观察对象。...SwiftUI 将根据可观察对象在视图中注入方式选择对应观察手段。 例如,上文中同时满足两种观察途径可观察对象,根据其注入方式不同,SwiftUI 采用更新策略也将不同。...通过 withObservationTracking创建观察操作每个被读取可观察属性都会主动地创建与订阅者之间关联。...另外, 我们之前在视图中很多优化技巧也将发生改变。例如,在使用 ObservableObject ,我们会通过只引入与当前视图有用数据,来减少不必要刷新。

49520

我庆幸果断放弃了SwiftUI:它还不够成熟

这是一项很好技术,响应式方法非常适合许多典型基于视图需求,但对如何处理边缘情况,文档中非常缺乏相关说明。” “这是个好主意,但 SwiftUI 主要问题是完全不成熟。”...好在配合 some 关键字和 opaque 类型等设计,我最终还是为可选对象找到了一种实现方法,让每个对象都能提供自身特定 UI 元素。...但在开始实现更复杂检查器视图,特别是涉及带有 / 不带步进器或颜色选择多个文本字段,整个运行速度开始剧烈下降。...如大家所见,这是个复杂窗口,包含多种不同上下文(上方「Sprite 资产数据库」列表,左侧特定「Sprite 资产数据库」内容,以及其他与选定 Sprite 资产对应编辑器元素)。...我需要为每个上下文创建一个视图,这些视图同时又是其他视图「子视图」,然后把需要数据传递给特定视图

4.9K20

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

本文将通过一个优化列表视图案例,展现在 SwiftUI 中查找问题、解决问题思路,其中也会对 SwiftUI 视图显式标识、@FetchRequest 动态设置、List 运作机制等内容有所涉及...首先创建一个假设性需求: 一个可以展示数万条记录视图 从上个视图进入该视图不应有明显延迟 可以一键到达数据顶部或底部且没有响应延迟 响应迟钝列表视图 通常会考虑采用如下步骤以实现上面的要求:...找寻问题原因 或许有人会认为,毕竟数据量较大,进入列表视图有一定延迟是正常。但即使在 SwiftUI 效能并非十分优秀今天,我们仍然可以做到以更小的卡顿进入一个数倍于当面数据量列表视图。...也就是显示主界面菜单列表视图已经完成了实例创建(可以通过在 ListEachRowHasID 构造函数中添加打印命令得以证明),因此也不应是实例化列表视图导致延迟。...仅通过 ForEach 来指定显示标识,List 会对这些视图显示进行优化,仅在需要显示才会对其进行实例化。

9.1K20

SwiftUI TextField 进阶 —— 事件、焦点、键盘

事件 onEditingChanged TextField 获得焦点(进入可编辑状态),onEditingChanged将调用给定方法并传递true值; TextField 失去焦点,再次调用方法并传递...视图中有多个 TextField ,通过 onSubmit 和 FocusState(下文介绍)结合,可以给用户带来非常好使用体验。...在 SwiftUI 3.0 中,苹果为开发者提供了一个远好于预期解决方案,同 onSubmit 类似,可以从更高视图层次来统一对视图中 TextField 进行焦点判断和管理。...使用快捷键获得焦点 一个视图中有多个 TextField(包括 SecureField),我们可以直接使用Tab键按顺序在 TextField 中切换焦点,但 SwiftUI 并没有直接提供使用快捷键让某个...同其他类型 Toolbar 类似,SwiftUI 会干预内容排版。•无法对同一视图中多个 TextField 分别设定辅助视图在 ToolbarItem 中无法使用稍微复杂一点判断语法。

13.1K10

如何让 SwiftUI 列表变得更加灵活

前言 List 可能是 SwiftUI 附带内置视图中最常用一种,它使我们能够在任何 Apple 平台上呈现“类似于表格视图用户界面。...,可以让我们开发更加方便,阅读感觉更加自然。...为了演示这种情况,我们在 List 中嵌套一个 ForEach (因为在 SwiftUI 中,列表变化一版都是由 ForEach 触发,而不是由 List 触发)。...在列表中使用 refreshable 修饰符就可以完成,然后使用该修饰符闭包 await 调用视图模型异步 reload 方法: struct ArticleList: View { @ObservedObject...可定制分隔符 自从引入 SwiftUI 以来,开发者们有一个非常普遍要求,提供一个 API ,用于隐藏或以其他自定义实现列表每个 item 之间默认分隔符。

4.8K41

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

首先,导航到 VideoFeedView.swift 并在 SwiftUI 导入正下方添加以下导入: import AVKit 看看下面这个,你会看到你已经有了一个列表一个视频数组。...您想对事物工作方式进行非常具体控制最好编写自己视频视图。 让事情顺利进行是你工作。...2) 有人双击播放器视图,您可以添加一个侦听器。 这会在 2x 和 1x播放速率之间切换。 3) 有人单击播放器视图,您可以添加一个侦听器。 这会切换视频静音状态。...视图修饰符,并在 On Dismiss Closure 注释后添加以下内容: embeddedVideoRate = 1.0 系统不再需要播放器对象,您还可以停止播放视频并从播放器对象中删除所有项目...缺点是,在撰写本文,iOS 14.5是可用最新版本,VideoPlayer SwiftUI 视图未显示画中画按钮。

6.9K10

【visionOS】从零开始创建第一个visionOS程序

每个场景都包含要显示视图和控件,场景类型决定内容是采用2D还是3D外观。SwiftUI为visionOS添加了3D场景类型,还为所有场景类型添加了3D元素和布局选项。...创建你Xcode投影页面链接 在Xcode中选择File >新比;项目。导航到模板选择visionOS部分,并选择App模板。出现提示,为项目指定一个名称以及其他选项。...创建一个visionOS应用程序时,你可以从配置对话框中配置应用程序初始场景类型。要在初始场景中主要显示2D内容,请选择Window作为初始场景类型。对于主要3D内容选择一个Volume。...由于创建实体成本相对较高,因此视图只运行一次创建代码。您想要更新实体状态,请更改视图状态并使用update闭包将这些更改应用于内容。...指定手势发生在实体上SwiftUI执行提供闭包。 下面的示例将一个点击手势识别器添加到上一个示例中球体视图中

69940

打造可适配多平台 SwiftUI 应用

本文是笔者参加 2023 年 4 月 20 日 “SwiftUI 技术沙龙( 北京站 )” 活动分享内容。基于记忆整理而成。...这是因为 horizontalSizeClass 只表示当前视图横向尺寸类别,也就是说,如果在一个横向尺寸被限定视图中( 例如 NavigationSplitView Sidebar 视图 )获取...因此,如果我们打算将应用引入到一个支持多窗口平台时候,最好能提前考虑到这种情况,想好如何组织应用状态。...一个场景被创建后,通过 onAppear 里代码,在 App State 中创建属于它自己 State 数据,并在场景被删除,通过 onDisappear 里代码,将当前场景 State 清除掉...在 SwiftUI 中,只要理解了状态、声明和响应之间关系,开发者就可以用任何想用形式来组织数据。无论是将状态进行统一管理,还是分散在不同视图中,都有各自优势和意义。

3.1K80

SwiftUI 实现 3D Scroll 效果

我们预览下今天要实现 3D scroll 效果。学完本教程后,你就可以在你 App 中把这种 3D 效果加入任何自定义 SwiftUI 视图。下面我们来开始本教程学习。...入门 首先,创建一个 SwiftUI 视图。为了举例说明,在这个新视图中,我会展示一个有各种颜色矩形列表,并把新视图命名为 ColorList。...Rectangle 在屏幕上移动,这个方法 Angle 参数会发生改变。...axis 参数是一个元组类型,它定义了在使用你传入角度参数,哪一个坐标轴要发生改变。在本例中,是 Y 轴。 rotation3DEffect() 方法文档可以在苹果官方网站 这里 找到。...矩形在屏幕上移动,你可以看到它们在旋转。 我还修改了矩形 cornerRadius 属性,并加上了投影效果,让它更美观。

1.5K20

SwiftUI 中创建自适应程序化导航方案

与 UIKit 使用命令式导航方式不同,SwiftUI 作为一个声明式框架,感知与设置两者之间是二位一体关系。读取状态即可获知当前导航位置,更改状态便可调整导航路径。...取消选中高亮 // 可以用类似的方式,改善 contentID 变化后,content 列仍会有灰色选择提示问题 DispatchQueue.main.asyncAfter...在不久 Ask Apple[4] 中,苹果工程师介绍了如下方法:image-20221114135939796很遗憾,由于没有暴露 path 接口,问答中 navigationDestination...最好以导航容器所在视图 sizeClass 作为判断标准。例如,在 Side 列视图中,无论在任何环境下,horizontalSizeClass 始终为 compact 。...不要忘记 NavigationStack 视图不在它“栈”数据中在本例中,转换至 NavigationStack ,需要将 Detail 列中声明视图添加到“栈”底端。反过来则将其移除。

4.2K30
领券