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

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

Ask Apple 为开发者与苹果工程师创造了 WWDC 之外进行直接交流的机会。本文对本次活动中与 SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文为下篇。...因此,如果你正在创建一个视图来显示可滚动的内容,并可能进行选择操作,那么 iOS 和 macOS使用 List 将有最好的体验。...阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个底部对齐的滚动视图, macOS 上会不会有糟糕的性能?...我采用了常见的解决方案,即旋转滚动视图和里面的每个单元格,以获得预期的倒置列表 iOS 上,这很有效。但在 macOS 上,它使 CPU 使用率保持 100%。...A:解决办法:保留 TextField ,但当它不能被编辑,有条件地设置 disabled(true),当它可以编辑使用 disabled(false) 。

14.7K30

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

欢迎大家 Discord 频道[2] 中进行更多地交流判断一个可滚动控件( ScrollView、List )是否处于滚动状态某些场景下具有重要的作用。...本文将介绍几种 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。...绝大多数的时间里,Runloop 都处于 kCFRunLoopDefaultMode( default )模式中,当可滚动控件处于滚动状态,为了保证滚动的效率,系统会将 Runloop 切换至 UITrackingRunLoopMode...我们将以是否可以持续接收到它们的位置信息为依据判断当前是否处于滚动状态。...( 状态已变化为滚动中 ),保持手指处于按压状态并停止滑动,此方式会将此时视为滚动结束,而前两种方式仍会保持滚动中的状态直到手指结束按压IsScrolling我将后两种解决方案打包做成了一个库 —— IsScrolling

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

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

事件 onEditingChanged 当 TextField 获得焦点(进入可编辑状态),onEditingChanged将调用给定的方法并传递true值;当 TextField 失去焦点,再次调用方法并传递...使用快捷键获得焦点 当一个视图中有多个 TextField(包括 SecureField),我们可以直接使用Tab键按顺序 TextField 中切换焦点,但 SwiftUI 并没有直接提供使用快捷键让某个...通过结合FocusState和keyboardShortcut可以 iPad 和 MacOS 下获得这种能力。... SwiftUI 3.0 之前,我们必须在主视图上另外绘制或者使用SwiftUI 的方式来解决问题, SwiftUI 3.0 中,由于添加了原生设置键盘辅助视图(下文具体介绍)的功能,解决上述问题将不再困难...另外,有时候为了提高交互体验,我们可以希望用户录入结束后,无需点击return按键,通过点击屏幕其他区域或者以滚动列表的方式来取消键盘。同样也需要使用编程的方式让键盘消失。

13K10

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

Ask Apple 为开发者与苹果工程师创造了 WWDC 之外进行直接交流的机会。本文对本次活动中与 SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文为上篇。...假设我们想创建一个类似于 iMessage 的视图,在那里你可以看到一个信息列表(与本例无关),视图的底部有一个文本框。当用户点击文本字段,键盘会在其工具栏中出现一个文本字段。...DocumentGroupQ: macOS使用 SwiftUI 应用生命周期和 DocumentGroup ,如果应用仅为数据阅读器,是否可以禁止创建新文件?...onAppear、init、viewDidLoadQ:我的应用程序中,我 UIHostingController 中托管了 SwiftUI 视图,这些视图都处于一个 UITabBarController...WindowGroup 和 OpenWindowActionQ: macOS 上是否可以创建新窗口附加参数?我同一个子上下文中创建一个新的托管对象,并希望将这个对象发送到一个新的窗口。

12.1K20

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

,并可通过按钮搜索结果中进行滚动切换?...ForEach 形式 )中的 View 添加显式标识符后( 使用 id 修饰器),视图刷新,List 将会为 ForEach 中的所有视图创建实例( 并非渲染 )用以比对视图类型的构造参数是否发生变化...请阅读 优化 SwiftUI List 中显示大数据集的响应效率[6] 以及 避免 SwiftUI 视图的重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动到的..._25_53搜索条出现时,让 TextField 获得焦点通过 @FocusState ,让 TextField 搜索条出现时,自动获得焦点,从而自动开启键盘。...每周也会对当周博客上的新文章以及 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅 邮件列表[14],可以及时获得每周的 Tips 汇总。

4.1K30

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

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

30320

老人新兵 —— 一款 iOS APP 的开发手记

考虑到身体也已经恢复到了一个不错的状态,就决定尝试做一个能满足自己需求的 app, 一方面是活动活动脑子,另一方面也算重拾当前的兴趣。...吐槽、提示、经验、总结本文基本上处于意识流状态,想哪写哪。下文是关于我开发过程中遇到的一些问题,bug ,总结的技巧,获得的一点点经验等。没有必然的前后顺序,如果里面有错误,希望大家轻点点评 。...复杂的 Form 同一个 view 中,处于 Sheet 和非 Sheet 下也会出现异常。TextField简单应用没有问题,除了不支持多行输入。...如果 TextField ScrollView 中,当在不同的 Segment Picker 中切换使用系统自带中文输入会闪退。英文和第三方中文输入没有问题。...但我一头脑发热 app 已经进入了 review 的情况下改动了资费的元数据,结果 app 被拒,而此时该资费便始终处于审核状态

2.5K40

SwiftUI 状态管理系统指南

前言 SwiftUI与苹果之前的UI框架的区别不仅仅在于如何定义视图和其他UI组件,还在于如何在整个使用它的应用程序中管理视图层级的状态。...SwiftUI没有使用委托、数据源或任何其他UIKit和AppKit等命令式框架中常见的状态管理模式,而是配备了一些属性包装器[1],使我们能够准确地声明我们的数据如何被我们的视图观察、渲染和改变。....padding() } } 就像我们将State和Binding包装的属性传入各种TextField实例用$作为前缀一样,我们将任何State值连接到我们自己定义的Binding属性也可以做同样的事情...StateObject——我仍然建议观察外部对象使用ObservedObject,而在处理视图本身拥有的对象使用StateObject。...小结 SwiftUI管理状态的方式绝对是该框架最有趣的方面之一,它可能需要我们稍微重新思考数据应用中的传递方式——至少涉及到将被我们的UI直接消费和修改的数据是这样。

5K20

SwiftUI使用UIKit视图

如果你已经对如何使用UIViewRepresentable有所掌握,可以直接从SwiftUI风格化部分阅读 基础 具体演示包装代码之前,我们先介绍一些与SwiftUI使用UIKit视图有关的基础知识...右侧的预览中,我们可以看到placeholder可以正常显示,如果你在其中输入文字,表现的状态也同TextField完全一致。...image-20210823091321562 查看源代码 避免滥用UIKit包装 尽管SwiftUI使用UIKit或AppKit并不麻烦,但是当你打算包装一个UIKit控件(尤其是已有SwiftUI...苹果为每一个原生控件(比如TextField),针对不同的平台(iOS、macOS、tvOS、watchOS)做了大量的优化。这是其他任何人都很难自己完成的。...学会使用很容易,但想用好确实有一定的难度。UIKit视图和SwiftUI视图之间共享可变状态和复杂的交互通常相当复杂,需要我们在这两种框架之间构建各种桥接层。

8.1K20

掌握 SwiftUI 的 Safe Area

SwiftUI 中,开发者通常只有需要获取 StatusBar + NavBar 的高度或 HomeIndeicator + TabBar 的高度才会使用到 safeAreaInsets 。...safeAreaInsetList2 遗憾的是, iOS 15 之前,SwiftUI 并没有提供调整视图安全区的手段,如果我们想通过 SwiftUI 的手段创建一个自定义 Tabbar 列表中最后的内容将被...尽管使用 safeAreaInset 为列表底部添加状态栏或自定义 TabBar 非常方便,但如果你的列表使用TextField,情况将变得很麻烦。...ignoresSafeArea,让 TextField 保持对键盘自动避让的情况下,固定底部的状态条。...此时,底部状态条的表现肯定不符合设计的初衷。 如果想让底部状态条固定,同时又保持 TextField 的自动避让能力,需要通过监控键盘的状态,做一点额外的操作。

7.4K31

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

这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及滚动中返回上层视图导致应用崩溃。...原文发表我的博客 肘子的Swift记事本视图变化在前、状态变化在后 SwiftUI 中,某些可编程控件执行一定的操作,会先更新视图,待视图变化完成后再修改与其对应的状态。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误的结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作状态更新的滞后会导致不可接受的后果。...请至少进入第三级视图滚动当前视图当视图处于滚动状态,点击 NavigationStack 左上角的 “Back” 按钮。...我们遇到问题的两个场景中,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态

554110

打造可适配多平台的 SwiftUI 应用

本文是笔者参加 2023 年 4 月 20 日 “SwiftUI 技术沙龙( 北京站 )” 活动的分享内容。基于记忆整理而成。...有关本次活动的情况,可以参阅 我北京参加 SwiftUI 技术沙龙 一文。本次活动采用的是线下交流并辅以 live coding 的形式,因此内容的侧重点以及组织形式与以往的博客文章会有明显的不同。...图片我们设计这个 App 的状态,就要考虑到哪些是应用全局的状态,哪些是仅限于当前场景(窗口)的状态。... SwiftUI 中,只要理解了状态、声明和响应之间的关系,开发者就可以用任何想用的形式来组织数据。无论是将状态进行统一管理,还是分散不同的视图中,都有各自的优势和意义。...最后,我们来谈谈将“电影猎手”适配到 macOS ,碰到的另外一个与数据源有关的问题。

3K80

【工具】一个投行工作十年MM的Excel操作大全

END模式工作表中移动 打开或关闭 END 模式:END 一行或列内以数据块为单位移动:END, 箭头键 移动到工作表的最后一个单元格....:END, ENTER 3>Excel快捷键之处于滚动锁定”模式工作表中移动 打开或关闭滚动锁定:SCROLL LOCK 移动到窗口中左上角处的单元格:HOME 移动到窗口中右下角处的单元格:END...向上或向下滚动一行:上箭头键或下箭头键 向左或向右滚动一列:左箭头键或右箭头键 4>Excel快捷键之用于预览和打印文档 显示“打印”对话框:CTRL+P 在打印预览中: 当放大显示文档中移动...:箭头键 当缩小显示文档中每次滚动一页:PAGE UP 当缩小显示滚动到第一页:CTRL+上箭头键 当缩小显示滚动到最后一页:CTRL+下箭头键 5>Excel快捷键之用于工作表、图表和宏...:SCROLLLOCK, SHIFT+HOME 将选定区域扩展到窗口右下角的单元格:SCROLLLOCK, SHIFT+END 13>Excel快捷键之处于End模式展开选中区域 打开或关闭 END

3.6K40

提高效率 |ArcGIS Pro 中所有快捷键一网打尽

箭头键或左箭头键 功能区或窗格中从一个选项卡移至另一选项卡。 Tab 键或 Shift+Tab 功能区、窗格、视图或对话框上的命令或项目之间移动。 上箭头键或下箭头键 列表中的元素之间移动。...将更改应用于当前部分,并使构造工具处于活动状态,以为要素创建另一部分。 空格键 打开和关闭捕捉。 按住空格键,会暂时关闭捕捉功能。创建手绘折线或面要素,暂时打开捕捉功能。...C 使用浏览工具覆盖活动工具。 Q 漫游。 X 逐步缩小。 Z 持续缩放。 < 转至上一视图。 > 转至下一视图。 1 当地图框处于活动状态,可在布局上缩放和平移。...C 使用浏览工具覆盖活动工具。 使用其他工具执行其他任务,按住 C 可使用浏览工具。...模式 用于模型的键盘快捷键 键盘快捷键 操作 Ctrl+N 当模型视图处于活动状态,创建一个新模型。 Ctrl+S 保存活动模型。 Ctrl+Shift+S 使用其他名称和位置保存活动模型。

57120

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

这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及滚动中返回上层视图导致应用崩溃。...视图变化在前、状态变化在后 SwiftUI 中,某些可编程控件执行一定的操作,会先更新视图,待视图变化完成后再修改与其对应的状态。这些控件基本上都是对 UIkit(AppKit)的二次包装。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误的结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作状态更新的滞后会导致不可接受的后果。...请至少进入第三级视图 滚动当前视图 当视图处于滚动状态,点击 NavigationStack 左上角的 “Back” 按钮。...我们遇到问题的两个场景中,应用程序都恰好使用了导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态

24220

打造可适配多平台的 SwiftUI 应用

本文是笔者参加 2023 年 4 月 20 日 “SwiftUI 技术沙龙( 北京站 )” 活动的分享内容。基于记忆整理而成。...有关本次活动的情况,可以参阅 我北京参加 SwiftUI 技术沙龙[1] 一文。...RocketSim_Screenshot_iPad_Pro_11'_2023-04-24_10.15.30 我们设计这个 App 的状态,就要考虑到哪些是应用全局的状态,哪些是仅限于当前场景(窗口)... SwiftUI 中,只要理解了状态、声明和响应之间的关系,开发者就可以用任何想用的形式来组织数据。无论是将状态进行统一管理,还是分散不同的视图中,都有各自的优势和意义。...最后,我们来谈谈将“电影猎手”适配到 macOS ,碰到的另外一个与数据源有关的问题。

1.9K10

Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标

(鼠标移动过快 MacOS 无法正确拖动,建议传递一个duration关键字参数。)...当鼠标光标位于Mu编辑器窗口上Mu编辑器的交互式 Shell 中运行以下内容: >>> pyautogui.scroll(200) 如果鼠标光标可以向上滚动的文本字段上,您将看到 Mu 向上滚动...获取活动窗口 屏幕上的活动窗口是当前处于前台并接受键盘输入的窗口。如果您当前正在Mu编辑器中编写代码,则Mu编辑器的窗口是活动窗口。屏幕上的所有窗口中,一次只有一个是活动的。...属性包含指示窗口当前是否处于状态的布尔值。maximize()?、minimize()、?、activate()、?,还有restore()?方法改变窗口的状态。...按下向下箭头键正确的次数来选择向导电源:一次为魔杖,两次为护身符,三次为水晶球,四次为金钱。然后按下Enter。(请注意, MacOS 上,您必须为每个选项再按一次向下箭头键

8.1K51

SwiftUI TextField进阶——格式与校验

SwiftUI TextField进阶——格式与校验 如想获得更好的阅读体验,请访问我的博客 www.fatbobman.com[1] SwiftUITextField可能是开发者应用程序中最常使用的文本录入组件了...如何在TextField中实现格式化显示 现有格式化方法 SwiftUI 3.0中,TextField新增了使用新老两种Formatter的构造方法。...只有当触发submit状态(commit)或失去焦点,才会对文本进行格式化。行为与我们的最初的需求有一定差距。...如何在TextField中屏蔽无效字符 现有屏蔽字符方法 SwiftUI中,可以通过设置仅使用特定的键盘类型来实现一定程度上的录入限制。...可能的屏蔽字符解决思路 •使用UITextFieldDelegate的textField方法•SwiftUI的视图中,使用onChange录入发生变化时进行判断并修改 第一种思路,仍需使用Introspect

8K20

SwiftUI数据流之State&Binding

SwiftUI中,以单一数据源(single source of truth)为核心,构建了数据驱动状态更新的机制。...struct的拷贝,所以其中一个View的struct值发生变化,对另一个没有影响;反之,如果是class则会互相影响; 当User是一个结构体,每次我们修改这个结构体的属性,Swift实际上是创建一个新的结构体实例...将存储在别处的值语意的属性转换为引用语义,使用时需要在变量名加$符号。...,这是因为@State 修饰的属性的它的所有相关操作和状态改变都应该是和当前视图生命周期保持一致,当视图没有被初始化完成,无法完成状态属性和视图之间的绑定关系;_location不在是nil,其中保存了众多标记视图唯一性的信息...,用于Struct中mutable值类型,它的所有相关操作和状态改变和当前 View 生命周期保持一致 Binding将存储在别处的值语意的属性转换为引用语义,使用时需要在变量名加$符号 添加了property

3.9K30
领券