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

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

这有点笨拙,我不认为有两个文本框是正确的做法。另外,按照这种方法,@FocusState 变量会变得没有反应,而且它不能被设置 nil( 返回到以前的视图并没有移除键盘 )。...如果你不想让父视图也被更新,可以在创建对象时不使用 @StateObject @ObservedObject 。...在有些情况下,我想根据视图是否折叠来做决定( 例如,如果展开,在详细视图中显示一条信息,如果折叠,显示一个警告其他指示 )。...A:如果你在 iOS 上使用 UITextField 遇到性能问题,你可以尝试避免每个视图都是 UITextField ,默认渲染 Text ,当文本被点击时动态切换为 UITextField 。...ViewBuilder 中的 if 语句Q:我知道 SwiftUI 是基于 ResultBuilder 的。所以 if 语句通过树状结构与 buildEither 进行操作。

12.2K20

SwiftUI TextField进阶——格式与校验

作为UITextField(NSTextField)的SwiftUI封装,苹果开发者提供了众多的构造方法和修饰符以提高其使用的便利性、定制性。...在SwiftUI早期,这确实是十分有效的手段。不过随着SwiftUI的逐渐成熟,苹果SwiftUI的API提供了大量独有功能。如果仅为了某些需求而放弃使用官方的SwiftUI方案有些得不偿失。...第二种思路,则是不使用黑魔法,仅通过SwiftUI的原生方式,在录入文本发生变化时,对文本进行格式化。本文的方案二是该思路的具体实现。...有些开发者可以通过自定义键盘添加inputAccessoryView来解决,但对于其他没有能力精力的开发者来说,如果能直接对录入的无效字符进行屏蔽也是不错的解决方案。...如果你需要判断的是日期其他自定义格式数据,最好也在代码中提供针对本地化字符的处理过程。 Formatter SwiftUI的TextField目前对新老两种Formatter都提供了对应的构造方法。

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

SwiftUI 视图中打开 URL 的若干方法

image-20220520182722773 SwiftUI 1.0( iOS 13、Catalina ) 在视图中,开发者通常需要处理两种不同的打开 URL 的情况: 点击一个按钮( 类似的部件...} 而第二种场景实现起来就相当地麻烦,需要包装 UITextView( UILabel )并配合 NSAttributedString 一起来完成,此时 SwiftUI 仅被当作一个布局工具而已。...AttributedString 设置了前景色,但当某段文字的 link 属性非 nil 时,Text 将自动忽略它的前景色和下划线设定,使用系统默认的 link 渲染设定来显示。...OpenURLAction ,使用系统默认的实现) public static func systemAction(_ url: URL) -> OpenURLAction.Result...// 当前代码不处理,将新的 URL 向下传递( 如果外层没有用户的自定义 OpenURLAction ,使用系统默认的实现) } } 比如: Text("www.fatbobman.com

7.6K31

SwiftUI:alert() 和 sheet() 与可选一起使用

SwiftUI有两种创建警报和表单的方式,到目前为止,我们仅使用一种方法:绑定到布尔,该布尔在变为 true 时显示 Alert Sheet。...第二种方法并不经常使用,但是在您需要的时候它确实有用:您可以使用可选的Identifiable对象作为条件,并且当该对象具有时将显示 Alert Sheet 。...它的闭包将为您提供用于条件的非可选,因此您可以安全地使用它。...= nil 现在,我们可以更改ContentView的body,以便在点击其文本视图时将selectedUser设置一个,然后再为selectedUser提供使用alert(item:)显示警报...解除警报后,SwiftUI会将selectedUser设置nil。 这似乎是一个简单的功能,但是比其他功能更简单,更安全。

2.4K40

SwiftUI 布局协议 - Part 1

如果在阅读本文的任何时候,你认为布局协议不适合你(至少目前来说),我仍然建议你查看 Part2 的这一小节—一个有用的调试工具,这个工具可以帮助你使用 SwiftUI ,且不需要理解布局协议就可以使用。...例如,可能会根据提供的尺寸截取文本,或者在提供的宽度内垂直的展示文本如果使用 fixedSize 修改甚至可能超出屏幕就像例子中的图片一样。...当 sizeThatFits 方法在给定维度中(即宽度高度)收到的建议尺寸 nil 时,我们应该返回容器的理想尺寸。当收到的建议尺寸0.0时,我们应该返回容器的最小尺寸。...例如,如果你打算只用方形图片或者文本视图来使用自己的容器,或者你知道你的容器会有具体尺寸,或者你确定你所有的视图都拥有一样的优先级,等等。这些信息都可以大大的简化任务。...在本文的第二部分,我们将开始探索一些有趣的话题,比如自定义动画,双向自定义,递归布局布局组合。我还会介绍一个非常有用的调试工具,即使你没有创建自己的布局也可以使用

3.2K10

SwiftUI 布局 —— 尺寸( 上 )

这并非意味着尺寸在 SwiftUI 中不重要,事实恰恰相反,正是由于在 SwiftUI 中尺寸是一个十分复杂的概念,苹果将绝大多数有关尺寸的配置和表述都隐藏到了引擎盖之下,刻意对其进行了包装与淡化。...淡化尺寸概念的初衷或许是出于以下两点: 引导开发者转型到声明式编程逻辑,转变使用精准尺寸的习惯 掩盖 SwiftUI 中复杂的尺寸概念,减少初学者的困扰 但无论如何淡化掩盖,当涉及更加高级、复杂、精准的布局时...即使你对 Layout 协议不了解短时间无法使用 SwiftUI 4.0 ,并不会影响你对下文的阅读和理解。...( 文本不折行、不省略 ) 85.33 x 20.33( 上文例子中尺寸 ) 明确尺寸模式 如果建议宽度大于单行显示的需要,则需求宽度返回单行实现显示尺寸的宽度 85.33 ;如果建议宽度小于单行显示的需要则需求宽度返回建议尺寸的宽度...,并将调整后的尺寸作为需求尺寸返回给父视图 frame(idealWidth: 100, idealHeight: 100) 如果当前视图收到未指定模式的建议尺寸,返回 100 x 100 的需求尺寸

4.6K20

高级 SwiftUI 动画 — Part 1:Paths

,可以使用 .animation(nil)。...SwiftUI 已经不透明度制作了动画,而不需要我担心这一切。是的,这是真的,但只要 SwiftUI 知道如何将数值从原点插到终点。对于不透明度,这是一个直接的过程,SwiftUI 知道该怎么做。...我想到了一些大的例外情况:路径(paths)、变换矩阵(matrices)和任意的视图变化(例如,文本视图中的文本、渐变视图中的渐变颜色停顿,等等)。在这种情况下,框架不知道该怎么做。...Double,但在外部使用Int。...SwiftUI + Metal 如果你发现自己正在编写复杂的动画,你可能会开始看到你的设备受到影响,同时试图跟上所有的绘图。如果是这样,你肯定会从启用金属的使用中受益。

3.7K20

高级 SwiftUI 动画 — Part 3:AnimatableModifier

使用 AnimatableModifier 可以避免出现这种情况。 很容易就可以实现这个功能,在这个基础上可以实现更多复杂的动画。如果需要插入中间颜色,我们只需要计算 RGB 的平均值。...下面我们来介绍一下如何创建一个计数器动画: 这个练习的诀窍是每个数字使用 5 个文本视图,并使用 .spring() 动画上下移动它们。...我们还需要使用 .clipShape() 修饰符来隐藏在边框之外绘制的部分。为了更好地理解它是如何工作的,您可以评论 .clipShape() 并大大减慢动画的速度。...这个动画实现的主要内容是每个数字使用 5 个文本视图,并使用 .spring() 动画上下移动它们。然后使用 .clipShape() 修饰符来隐藏边框之外区域。...通常情况下是通过 .foregroundColor() 动画添加颜色,但是在文本类动画中使用没有效果,不知道是缺少什么配置还是什么原因。

1.3K10

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

Ask Apple 开发者与苹果工程师创造了在 WWDC 之外进行直接交流的机会。本文对本次活动中与 SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文下篇。...A:没有区别,使用这两种方法可以适当地隐藏图像,使其不被辅助技术所发现!accessibilityHidden 支持任意符合 View 协议的元素,同时可以动态调整它的隐藏状态。...自定义布局Q:我经常想根据列表中最长最短的文字来布置各种小组件。鉴于动态文本大小在应用程序运行时可能会发生变化,衡量给定字体的文本大小的最佳方法是什么?A:你好!我们新的布局协议支持这个功能。...将背景扩展到安全区域Q:如果我有一个自定义的容器类型,可以接受一个顶部和底部的视图,是否有办法让 API 的调用者将所提供的视图的背景扩展到安全区域内,同时将内容( 如文本按钮 )保留在安全区域内?...因为通常情况下并不需要这个如果是要检测滚动掉帧,可以在 Xcode Organizer 里查看,或者用 MetricKit 生成报告,开发环境也可以使用 Instruments 。

14.7K30

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

几点提示: SwiftUI 可能会在应用初始阶段部分视图设置 transaction( nil ),即使没有设置,也不影响视图在状态变化时获取正确的 transaction。...SwiftUI 可能会在状态改变后为部分视图重置 transaction( nil ),即使没有重置,也不影响下次的动画( 下次状态变化时,会生成新的 transaction )。...后来提供的具备关联版本的修饰器(类似于上面的自定义版本),将保证只在特定关联发生变化时才创建 transaction,但如果使用不当,仍会出现问题。 例如,我们想要创建一个矩形。...使用命令式编程的手段,通过全局函数 withAnimation withTransaction 创建 transaction 的方式被称为“显式动画”。...使用“显式动画”,SwiftUI 将自动 VStack 派发 transaction。 当然,如果我们可以调整数据源的位置,那么 “隐式动画” 同样可以避免上面的情况。

44420

SwiftUI 的动画机制

阅读本文前,读者最好已拥有在 SwiftUI使用动画编程的经历,SwiftUI 动画的基本使用方法有一定的了解。可以在 此处获取本文的全部代码[2] SwiftUI 的动画是什么?...将使用指定的算法函数,特定部件(如果该部件是可动画的话)提供用于生成平滑过渡而需的数据。...将时序曲线函数与状态关联 只有通过某种形式将时序曲线函数(Animation)与某个(多个)依赖项关联后,SwiftUI 才会在状态( 被关联的依赖项 )变化时动画生成插数据。...对同一个动画部件的不同依赖项关联不同时长函数时( duration 不一致启用了 repeatForever ),插的计算逻辑将会变得更加复杂,不同的组合会有不同的结果,需慎重使用。...符合 Animatable 协议,使用 linear 进行插计算 SwiftUI 将按照设备的刷新率( 60 fps/sec 120 fps/sec)持续使用 linear 的计算结果设置 AnimationDataMonitorView

14.6K40

转-Go语言开发常见陷阱,你遇到过几个?

使用nil”切片(Slices)和图(Maps)——nil”切片添加对象是可以的,但对于图来说,这样会造成运行缓慢。 图容量——可以在创建时设定图的容量,但是不用对图使用cap()。...切片和数组“范围(range)”里的异常——在使用for-inforeach语句时会遇到该问题。在Go中,range的定义是有所不同的。它会产生两个:第一个索引项,第二个说项的数据。...字符串和索引运算符——字符串中的索引运算符返回的是字节而不是字符。 字符串不总是UTF8文本——字符串没有被限定为UTF8文本。它们可以包含任何字节。只有当使用字符串常数时才是UTF8文本。...递增和递减:Go中是不支持i++++i的递增/减操作的。 按位不是运算符:很多语言使用~来作为一元逻辑非运算符,而Go中使用^。 运算符优先级差异。 导出结构域是没有编码。...可以使用recover()来捕获/拦截异常。 更新和引用切片,数组,及图“range”的项。 切片的“隐藏”数据。 切片数据的错误。 “变味”的切片。 类型声明和方法。

1.3K101

AttributedString——不仅仅让文字更漂亮

如果想获得更好的阅读体验,请访问我的博客www.fatbobman.com 初步印象 AttributedString是具有单个字符字符范围的属性的字符串。...// 设置属性——超链接 image-20211007165456612 在WWDC 2021之前,SwiftUI没有提供对属性字符串的支持,如果我们希望显示具有丰富样式的文本,通常会采用以下三种方式...: •将UIKitAppKit控件包装成SwiftUI控件,在其中显示NSAttributedString•通过代码将NSAttributedString转换成对应的SwiftUI布局代码•使用SwiftUI...通过配置container,我们可以一次性地属性字符串(片段)设置、替换、合并大量的属性。...:属性)来标记自定义属性 调用 // 在Markdown文本中解析自定义属性时,需指明Scope。

3.8K40

掌握 SwiftUI 的 Safe Area

在 UIKit 中,开发者需要利用 safeAreaInsets safeAreaLayoutGuide ,才能确保将视图放置在界面中的可见部分。 SwiftUI 对上述过程进行了彻底的简化。...如果一个视图可以完整地放置在父视图的安全区域中,该视图的 safeAreaInsets 0。当视图尚未在屏幕上可见时,该视图的 safeAreaInset 也 0 。...在 SwiftUI 中,开发者通常只有在需要获取 StatusBar + NavBar 的高度 HomeIndeicator + TabBar 的高度时才会使用到 safeAreaInsets 。...safeAreaInsetList2 遗憾的是,在 iOS 15 之前,SwiftUI 并没有提供调整视图安全区的手段,如果我们想通过 SwiftUI 的手段创建一个自定义 Tabbar 时,列表中最后的内容将被...尽管使用 safeAreaInset 列表在底部添加状态栏自定义 TabBar 非常方便,但如果你的列表中使用了 TextField,情况将变得很麻烦。

7.5K31

SwiftUI 布局 —— 尺寸( 下 )

用 viewModifier 包装布局容器 在 SwiftUI 中,通常需要对布局容器进行二次包装后再使用。...,以及子视图的布局尺寸 当只有一个维度设置了具体 A,则将该 A 作为 _FrameLayout 容器在该维度上的需求尺寸,另一维度的需求尺寸使用子视图在该维度上的需求尺寸( 以 A 及 _FrameLayout...nil : proposal.width // 如果 horizontal true 提交非指定模式的建议尺寸,否则提供父视图在改维度上的建议尺寸 let height = vertical...nil : proposal.height // 如果 vertical true 提交非指定模式的建议尺寸,否则提供父视图在改维度上的建议尺寸 let size = content.sizeThatFits...当 min ( 和 ) max 有时,会按如下规则返回 _FlexFrameLayout 的在该维度上的需求尺寸( 下图来自于 SwiftUI-Lab[6] ) frame-flow-chart

2.6K40

SwiftUI 下定制手势

SwiftUI 下定制手势 请访问我的博客 www.fatbobman.com ,以获得更好的阅读体验 不同于众多的内置控件,SwiftUI 没有采用对 UIGestureRecognizer(...GestureState 专门 SwiftUI 手势开发的属性包装器类型,可作为依赖项驱动视图更新。...相较 State 有如下不同: •只能在手势的 updating 方法中修改,在视图其它的地方为只读•在手势结束时,与之关联(使用 updating 进行关联)的手势会自动将其内容恢复到它的初始•通过...通过将手势手势处理逻辑封装成视图扩展可进一步简化使用难度。 为了突显某些方面的功能,下文中提供的演示代码或许看起来比较繁琐。实际使用时,可自行简化。...•在 updating 中对偏移量进行判断,如果按压点的偏移超出了指定的范围,中断计时。

2.6K20

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

修改为 String )当声明代码可以部分改善在视图中使用托管对象的友善度。相较于将具有默认的属性声明为可选类型( 例如 String ),数值属性的声明更加令人困惑。...可能开发者会有这样的疑问,假如某个实体的属性在模型中被定义可选,且在托管对象的类型声明中也可选类型( 例如上方的 timestamp 属性 ),那么如果在可以保证 save 时一定有的情况下,是否可以在使用使用...从另一个角度来看,即使在托管上下文中使用 delete 方法删除该实例在数据库中对应的数据,但如果该托管对象实例仍被代码视图所引用,Swift 并不会销毁该实例,此时,托管对象上下文会将该实例的 managedObjectContext...此时如果再访问该实例的可选类型属性( 例如之前一定有的 timestamp ),返回则为 nil 。强制解包将导致应用崩溃。...在代码视图中,如果不为随时可能已被删除的数据做好安全准备,问题将十分地严重。

3.2K20
领券