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

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

是否任何建议用来检测列表行选择,类似于 “NavigationLink”,但不导航另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...只有这些变量重构视图模型中去这一种方式?A:如果在同一个视图中,多个相互关联 @State 属性,将他们提取到一个结构或许是好选择。...这有点笨拙,我不认为两个文本框是正确做法。另外,按照这种方法,@FocusState 变量会变得没有反应,而且它不能被设置为 nil( 返回到以前视图并没有移除键盘 )。...事实上,这些视图( 惰性容器视图 )一旦被创建,其存续期持续惰性容器被销毁为止。请阅读 SwiftUI 视图生命周期研究[12] 了解更多内容。...除了使用习惯外,还应考虑偏移后视图是否需要会对周边视图产生影响( 布局层面 )。详情请阅读 在 SwiftUI 实现视图居中若干种方法[14] 。

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

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

SwiftUI TextField 进阶 —— 事件、焦点、键盘 想获得更好阅读体验,可以访问我博客 www.fatbobman.com[1] 本文探讨涉及 SwiftUI TextField 事件...事件 onEditingChanged 当 TextField 获得焦点时(进入可编辑状态),onEditingChanged调用给定方法传递true值;当 TextField 失去焦点时,再次调用方法传递...在 iOS 15 ,新增支持 ParseableFormatStyle 构造方法不提供该参数,因此对于使用新 Formatter TextField 需要使用其他手段来判断是否获得或失去焦点...在 SwiftUI 3.0 之前,我们必须在主视图上另外绘制或者使用非 SwiftUI 方式来解决问题,在 SwiftUI 3.0 ,由于添加了原生设置键盘辅助视图(下文具体介绍)功能,解决上述问题将不再困难...键盘辅助视图集成 toolbar 逻辑也有些令人令人费解。 通过 UIKit 创建 当前阶段,通过 UIKit 来创建键盘辅助视图仍是 SwiftUI最优方案。

13.1K10

SwiftUI TextField进阶——格式与校验

本文为【SwiftUI 进阶】系列文章一篇,在本文中,我介绍如何在TextField实现如下功能: •屏蔽无效字符•判断录入内容是否满足特定条件•对录入文本实时格式化显示 textfieldDemo1...SwiftUI修饰方法) 以上原则,在SheetKit——SwiftUI模态视图扩展库[3]和用NavigationViewKit增强SwiftUI导航视图[4]均有体现。...如何在TextField屏蔽无效字符 现有屏蔽字符方法SwiftUI,可以通过设置仅使用特定键盘类型来实现一定程度上录入限制。...如何在TextField检查内容是否符合指定条件 相较上述两个目标,在SwiftUI检查TextField内容是否符合指定条件是相当方便。...如果你需要判断是日期或其他自定义格式数据,最好也在代码中提供针对本地化字符处理过程。 Formatter SwiftUITextField目前对新老两种Formatter都提供了对应构造方法

8.1K20

一种虚拟物体插入透明物体场景方法

虚拟物体插入真实场景需要满足视觉一致性要求,即增强现实系统渲染虚拟物体应与真实场景光照一致。...对于复杂场景,仅仅依靠光照估计无法满足这一要求。当真实场景存在透明物体时,折射率和粗糙度差异会影响虚实融合效果。本文提出了一种新方法来联合估计照明和透明材料,虚拟物体插入真实场景。...本文提出方法透明物体模型嵌入逆渲染,通过梯度下降优化算法求解透明物体精确折射率和粗糙度参数。...虚拟物体插入真实场景需要在增强现实中使用差分渲染技术,对场景进行没有/虚拟物体两次渲染,并为了完成融合图像,两次渲染之间差异进一步添加到图像。真实场景测试结果如下图所示。...本文方法可以用于在具有复杂透明材料真实物体增强现实系统获得更好融合效果。

3.8K30

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

View 添加显式标识符后( 使用 id 修饰器),在视图刷新时,List 将会为 ForEach 所有视图创建实例( 并非渲染 )用以比对视图类型构造参数是否发生变化,但仍然只会渲染屏幕上显示部分...请阅读 优化在 SwiftUI List 显示大数据响应效率[6] 以及 避免 SwiftUI 视图重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动到...在范例代码,我使用了 聊聊 Combine 和 async/await 之间合作[13] 一文中介绍方法,通过自定义 Publisher , async/await 方法嵌入 Combine...总结范例代码并没有十分刻意地创建规范数据流,但由于做到视图数据分离,因此将其改写成任何你想使用数据流方式并非难事。.../posts/swiftUILifeCycle/[10] 在 SwiftUI 视图中打开 URL 若干方法: https://www.fatbobman.com/posts/open_url_in_swiftUI

4.2K30

SwiftUI 视图中打开 URL 若干方法

访问我博客 www.fatbobman.com[1] 可以获得更好阅读体验 本文介绍在 SwiftUI 视图中打开 URL 若干种方式,其他内容还包括如何自动识别文本内容并为其转换为可点击链接...)打开指定 URL 文本部分内容变成可点击区域,点击后打开指定 URL 遗憾是,1.0 时代 SwiftUI 还相当稚嫩,没有提供任何原生方法来应对上述两种场景。..., URL 向下传递( 如果外层没有用户自定义 OpenURLAction ,则使用系统默认实现) } } 比如: Text("www.fatbobman.com feedback@...在 SwiftUI ,采用类似逻辑还有 onSubmit ,有关 onSubmit 信息,请参阅 SwiftUI TextField 进阶 —— 事件、焦点、键盘[6]。...SwiftUI 视图中打开 URL 几种方法,不过读者应该也能从中感受到 SwiftUI 三年来不断进步,相信不久后 WWDC 2022 会为开发者带来更多惊喜。

7.6K31

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

另外,如果你一个现有的iPad或iPhone,visionOS添加到应用程序,可以感受到更好更贴近现实外观与体验,并添加特定于平台功能,以创建引人注目的体验。...在任何SwiftUI应用,你都可以使用场景内容放到屏幕上。场景包含要在屏幕上显示视图和控件。场景还定义了这些视图和控件出现在屏幕上时外观。...视图为您界面提供基本内容,您可以使用SwiftUI修饰符自定义视图外观和行为。...Model3D视图加载USDZ文件或其他资产类型,并在窗口中以其固有大小显示它。在你应用已经模型数据地方使用它,或者可以从网络上下载它。...如果你需要定位SwiftUI视图和RealityKit实体之间相对位置,使用RealityViewcontent参数方法执行任何需要坐标转换。

71040

避免 SwiftUI 视图重复计算

通过 _makeProperty 方法SwiftUI 得以实现在视图加载到视图树时,把所需数据( 值、方法、引用等 )保存在 SwiftUI 托管数据池中,并在属性图( AttributeGraph...这是因为,我们 Student 类型作为参数传递给了子视图SwiftUI 在比对实例时候,并不会关心子视图中具体使用了 student 哪个属性,只要 student 发生了变化,那么就会重新计算...为了解决这个问题,我们应该调整传递给子视图参数类型和内容,仅传递视图需要数据。...让视图符合 Equatable 协议 为视图自定义判断相等比对规则 在早期 SwiftUI 版本,我们需要使用 EquatableView 包装符合 Equatable 协议视图以启用自定义比较规则...会在主线程上运行触发器闭包,如果闭包操作比较昂贵,可以考虑闭包发送到后台队列 总结 本文介绍了一些在 SwiftUI 如何避免造成视图重复计算技巧,除了从中查找是否能解决你当前问题方法

9.2K81

掌握 SwiftUI Safe Area

掌握 SwiftUI Safe Area 访问我博客 www.fatbobman.com[1] 可以获得更好阅读体验 Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供视图重叠内容空间...在 UIKit ,开发者需要利用 safeAreaInsets 或 safeAreaLayoutGuide ,才能确保视图放置在界面可见部分。 SwiftUI 对上述过程进行了彻底简化。...除非开发者明确要求视图突破安全区域限制,否则 SwfitUI 将尽力确保开发者创建视图都被布局安全区域当中。SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。...本文探讨如何在 SwiftUI 获取 SafeAreaInsets、视图绘制安全区域之外、修改视图安全区域等内容。...从 iOS 14 开始,SwiftUI 计算视图安全区域时,键盘在屏幕上覆盖区域(iPadOS 下,键盘缩小后键盘覆盖区域将被忽略)也一并进行考虑。

7.5K31

SwiftUI 布局 —— 尺寸( 上 )

在 Layout 协议,对应是 sizeThatFits 方法。经过该阶段协商,SwiftUI 确定视图所在屏幕上位置和尺寸。...以子视图为符合 Layout 协议自定义布局容器举例,父视图通过调用子视图 sizeThatFits 方法提供建议尺寸。...而该自定义布局容器又会在它 sizeThatFits 方法通过调用其子视图代理( Subviews,子视图在 Layout 协议表现方式 ) sizeThatFits 方法为子视图代理提供建议尺寸...在绝大多数情况下,自定义布局容器( 符合 Layout 协议)在布局第一阶段最终返回需求尺寸与第二阶段 SwiftUI 布局系统传递给它屏幕区域( CGRect )尺寸一致。...,例如: 在 ZStack ,ZStack 为子视图设置渲染尺寸与子视图需求尺寸一致 在 VStack ,VStack 根据其父视图提供建议尺寸、子视图是否为可扩展视图、子视图视图优先级等信息

4.6K20

掌握 Transaction,实现 SwiftUI 动画精准控制

每当状态发生变化时,SwiftUI 会根据是否由“显式动画”发起或是否有声明”隐式动画”等情况按需生成新 transaction,并在需要视图层次中进行传递。...因此,在接下来内容,我们更详细地介绍和阐述 transaction 细节和实现,帮助你更好地理解。...SwiftUI 会在以下情况下调用隐式动画创建 transaction: 当前视图分支在状态变化时会发生变化 当前视图分支上声明了隐式动画 下面的代码展示隐式动画是如何创建 transaction 并向下传递...这样一来,上游传来 transaction 按照原样沿视图链继续传递,从而保证开发者动画意图被正确地传递下去。 截止 Xcode 15 beta 2,新版本修饰符还无法正常工作。...开发者应根据需要选择是否采用其内置动画设置。 例如,对于 FetchRequest,我们可以通过三种方式来控制其在数据增加或删除时是否采用动画效果。

44220

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

背景扩展安全区域Q:如果我一个自定义容器类型,可以接受一个顶部和底部视图是否办法让 API 调用者所提供视图背景扩展安全区域内,同时内容( 如文本或按钮 )保留在安全区域内?...这意味着我们不能使用 LazyVStack,或任何其他选择与详细视图绑定自定义视图扩展这个功能计划吗?A:在 iOS 16.1 ,你可以在侧边栏里放一个。...软弃用Q:最近,我注意 @ViewBuilder 函数在以前版本是不可用,弃用信息提示我使用新方法取代老方法,这是 SwiftUI API 设计缺陷还是我错过了什么?...macOS APIQ:对于运行 Monterey Mac,能否如何在 SwiftUI 实现下面需求建议:打开一个窗口在该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口视图中关闭一个窗口...视图功能分散函数、更小视图结构以及视图修饰器当中是很好解决方法

14.7K30

SwiftUI 布局 —— 对齐

在 WWDC 2022 ,苹果为 SwiftUI 增添了 Layout 协议,让我们了更多机会了解和验证 SwiftUI 布局原理。...本文结合 Layout 协议内容对 SwiftUI “对齐” 进行梳理,希望能让读者对“对齐”更加清晰地认识和掌握。...在 SwiftUI ,对齐是指在布局容器多个视图按照对齐指南( Alignment Guide )进行对齐。...VStack、HStack、ZStack 等支持多视图布局容器 你是否了解 SwiftUI 常用布局容器构造方法对齐参数含义?它们又是如何实现呢?...因为在布局容器构造方法设定对齐指南只用于容器视图之间。 为了更好地理解之所以描述二才是正确,我们需要对 SwiftUI 布局原理以及 ZStack 处理方式有所了解。

6.3K20

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

在这篇文章,我们探讨几个在 SwiftUI 开发中经常使用且至关重要属性包装器。本文旨在提供对这些属性包装器主要功能和使用注意事项概述,而非详尽使用指南。...在复杂视图层级,逐级传递 @Binding 可能导致数据流难以追踪,此时应考虑使用其他状态管理方法。 确保 @Binding 数据源是可信,错误数据源可能导致数据不一致或应用崩溃。...它提供了一种便捷方式在不同视图层级引入共享数据,而无需显式地通过每个视图构造器传递。 典型应用场景 当需要在多个视图间共享同一个数据模型时,如用户设置、主题或应用状态。...它允许视图访问由 SwiftUI 或应用环境提供数据、实例或方法。...开发者可以通过自定义 EnvironmentKey 方式来创建自定义环境值,与系统提供环境值一样,可以定义各种类型( 值类型、Binding、引用类型、方法 ),详情请参阅 Custom SwiftUI

19210

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

苹果不仅带来了全新形态硬件产品,还推出了几个相当震撼新框架。本文聊聊我对本届 WWDC SwiftUI 5.0 和 SwiftData 初步印象。...,直接定位滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 滚动到顶端子视图缩小视觉效果...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表在推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...自定义迁移 plan 在第一版中有问题 可以与 Core Data 代码混用,需通过 entityVersionHashesByName 来判断 SwiftData 与 Core Data 两者模型是否完全一致...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装器) Attribute 派生选项被废弃了 可以在 Xcode 中使用 Model Editor Model

35010

ViewBuilder 研究(下) —— 从模仿中学习

视图能够提供信息 本文中视图是指符合 SwiftUI View 协议各种类型 开发者通过 SwiftUI 框架提供基础视图类型将自定义视图串联起来,这些视图SwiftUI 提供如下信息...数据池中视图 body 属性或视图类型特定类型方法(非公开)进行布局和渲染 当用户或系统某些行为导致依赖数据发生变化后,SwiftUI 根据依赖图定位需要重新评估视图 以需重新评估视图为根...,按视图层级结构依当前状态逐个实例化视图类型(满足全部显示所需为止) 已不再需要参与布局和渲染视图值从 SwiftUI 数据池中移除,并在数据池中添加上新增视图值 对于仍需显示但视图值发生变化视图...类型打印工具 为了在下文中更好比对我们自定义 ViewBuilder 同 SwiftUI 官方 ViewBuilder 之间对视图类型解析是否一致,我们还需要准备一个视图扩展方法(对原装和仿制都有效...// 多种方法可以实现类型擦除,本例 AnyView 实现与 SwiftUI 实现有较大区别 protocol TypeErasing { var view: Any { get } }

3K20

为什么SwiftUI视图使用结构体?

SwiftUI并非如此:我们更喜欢结构体用于整体视图,这有两个原因。 首先,一个性能因素:结构体比类更简单,更快。...在UIKit,每个视图都来自一个名为UIView类,该类具有许多属性和方法:背景色,确定其放置方式约束,用于将其内容呈现其中图层等等。...struct or class 通常这不是问题,但是一个名为UIStackView特定子类,它类似于SwiftUIVStack和HStack。...通过生成不会随时间变化视图SwiftUI鼓励我们转向更具功能性设计方法:在数据转换为UI时,我们视图变成简单,惰性东西,而不是会失去控制智能化东西。...相比之下,AppleUIView文档列出了UIView拥有的约200种属性和方法,无论是否需要它们,所有这些属性和方法都将传递给其子类。

3.1K10

GeometryReader :好东西还是坏东西?

另外,在某些情况下,GeometryReader 可能返回尺寸为负数数据。如果直接这些负数数据传递给 frame,就可能会出现布局异常(在调试状态下,Xcode 会用紫色提示警告开发者)。...作为一个视图,GeometryReader 只能在被评估、布局和渲染后,才能将获取数据传递给闭包代码。...不过,大家是否想过,其实在很多场景,GeometryReader 本来就并非最优解。与其说避免使用,不如说用更加 SwiftUI 方式来进行布局。...请阅读 用 SwiftUI 方式进行布局[9] 和 在 SwiftUI 实现视图居中若干种方法[10] 两篇文章,以了解面对同一个需求,SwiftUI 多种布局手段。...里子和面子:不同尺寸数据SwiftUI 一些 modifier 是在布局之后,在渲染层面对视图进行调整。

46270
领券