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

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

你可以使用符合 ObservableObject 协议的不同对象来分割失效的范围有时,不依赖 @Published 而获得一些手动控制并直接 objectWillChange 发布变化是很有用的添加一个中间视图...阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...A:你最好的选择是使用 ScrollView 和 ScrollViewReader,并在 onAppear 或新内容进来时滚动到最底部的视图。我不建议尝试旋转滚动视图。...TextField 内容验证Q:如何实现一个只接受数字的 SwiftUI TextField,小数是允许的。A:文本字段提供 FormatStyle 以实现自动将文本转换为各种数字。...但这个滚动有两大问题,1、是一个未公开的半成品,有可能会被从 SwiftUI 框架中移除;2、不支持懒加载,即使和 Lazy 视图一起使用也会一次性加载全部的视图

14.7K30

SwiftUI 布局协议 - Part2

在下一个例子中我们将会把前三个视图水平的放置在视图顶部,后三个水平的放置在底部。剩下的视图将会在中间,垂直排列。...此外,在与其他视图布局工作的时候,我们就相当于 SwiftUI 的角色。子布局的任何缓存创建和更新都属于我们的责任,幸运的是,这都很容易处理。我们只需要添加子布局缓存到我们自己的缓存里。...同时也要注意,这里有一个好的选择,即放置到具有垂直和水平滚动 ScrollView 中。 注意这是基本实现,仅用于说明如何实现。还有许多潜在的优化,但制作树布局所需的关键元素都在这里。...一个有用的调试工具 回到当 SwiftUI 刚发布的时候,我尽力搞清楚布局是如何工作的,我希望我有一个像我今天要介绍的这种工具 。直到现在,它都是最好的工具,用来添加围绕视图边框观察视图边缘。...使用边框依然是很好的调试工具,但我们可以添加一个新的工具。

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

掌握 ViewThatFits

ViewThatFits 视图查询其理想尺寸(根据未指定建议尺寸返回的需求尺寸)。 根据受限轴的设置,在选择的受限轴上,比较子视图的理想尺寸和 ViewThatFits 的父视图给出的建议尺寸。...它只在检查阶段使用子视图的理想尺寸进行判断,在最终呈现阶段,它将视图提交有值的建议尺寸,并使用子视图的需求尺寸作为自身的需求尺寸。...ScrollView:如果理想状态的轴与滚动方向一致,则在滚动方向上一次性展示所有的子视图而无视父视图的建议尺寸。 VStack、HStack、ZStack:所有子视图在理想状态下的整体呈现。...SwiftUI 提供了两个版本的 fixedSize ,我们当前使用的版本要求视图水平和垂直两个轴向上都使用理想尺寸,而另一个版本允许我们对单个轴向进行限定。...当 Text1 在垂直轴上被单独限定为理想尺寸时,它的高度超过了 ViewThatFits 可提供的高度 100(蓝色边框高度大于红色边框)。

15710

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

添加外边距(Margin)。...不限于 ScrollView,支持所有可滚动容器(包括 List、TextEditor 等)。 将可滚动容器内的所有子视图视为一个整体,并为其添加 margin。...可采用 优化在 SwiftUI List 中显示大数据集的响应效率[5] 一文中介绍的方式来解决。 scrollPostion(id:) 使用此修饰符可以让滚动视图滚动到特定的位置。...(视图标识) 不支持锚点设定,固定锚点为子视图的 center 正如 优化在 SwiftUI List 中显示大数据集的响应效率[6] 一文所提到的,当数据集很大时,也会出现性能问题。....automatic 是默认行为,在紧凑的水平尺寸类中受限,否则不受限。 .always 始终限制可滚动视图的数量。 .never 不限制可滚动视图的数量。

67120

SwiftUI: 使用 ImagePaint 制作边框和填充

SwiftUI严重依赖于协议,使用绘图时可能会有些混乱。例如,我们可以将Color用作视图,但它也符合ShapeStyle——用于填充,笔触和边框的另一种协议。...实际上,这意味着我们可以修改默认的文本视图,使其具有红色背景: Text("Hello World") .frame(width: 300, height: 300) .background...("Example")) 但是使用相同的图像作为边框将不起作用: Text("Hello World") .frame(width: 300, height: 300) .border(...为了解决这个问题,SwiftUI为我们提供了一种专用类型,该类型可以完全控制应如何渲染图像的方式包装图像,这又意味着我们可以将它们用于边框和填充而不会出现问题。...,直到填充其区域为止——它可以与背景,笔触,边框和任何大小的填充一起使用。

1.7K50

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

创建数据集 通过 List 展示数据集 用 ScrollViewReader 对 List 进行包裹 给 List 中的 item 添加 id 标识,用于定位 通过 scrollTo 滚动到指定的位置...也就是当显示主界面菜单时,列表视图已经完成了实例的创建(可以通过在 ListEachRowHasID 的构造函数中添加打印命令得以证明),因此也不应是实例化列表视图导致的延迟。...但一旦为这些子视图添加了 id 修饰符,这些视图将无法享受到 List 提供的优化能力 ( List 只会对 ForEach 中的内容进行优化)。...解决方案一 从 iOS 15 开始,SwiftUI 为 List 添加了更多的定制选项,尤其是解除了对列表行分割线设置的屏蔽且添加了官方的实现。...我们将通过 SwiftUI-Introspect[7] 来实现在 List 中滚动到列表两端。

9.1K20

点亮你 App 的 5 个 iOS 库

要使用视差效果,您至少需要两/三层具有相同尺寸的图像。以下是一个具体实例: let bg = TVButtonLayer(image: UIImage(named: "TVBG.png")!)...TKRubberIndicator TKRubberIndicator是Swift制作的库,它可在应用程序中添加橡胶动画页面控件。要使用它,您需要首先导入TKRubberPageControl框架。...DimensionsPickerView 只需要几行代码,DimensionsPickerView 就可让您添加一个漂亮的视图,该视图可用于测量数据输入。...可通过以下方式自定义占位符单位,字体颜色,间距和边框颜色/宽度: sizePickerView.textFieldConfigureBlock = { index, field in switch...Sliders Sliders是完全使用 SwiftUI 构建的库。它使您可以在 iOS,macOS 和 Mac Catalyst 上创建可自定义的水平和垂直滑块。

60720

使用 SwiftUI 的 Eager Grids

介绍 早在 2020 年,我们就拥有了在 SwiftUI(LazyVGrid 和 LazyHGrid)中绘制网格的新视图控件。两年后,我们又获得了另一种在网格(Grid)中显示视图视图控件。...lazy grids不会渲染甚至实例化屏幕外的视图。单元格视图仅在它们被滚动时创建,并且在它们滚动时停止计算。 这篇文章的主题 Eager Grids 正好相反。...从方形到六边形的步骤 我们必须从某个地方开始,所以我们将创建一个方形图像网格,然后逐渐添加代码将我们的简单网格转换为蜂窝。 到现在为止,您应该具备实现转换所需的所有知识。...第 6 步:要删除空白区域,请剪裁网格边框(或将其放在 ScrollView 中,它会为您进行剪裁)。步骤#7:如果使垂直间距等于水平间距,则单元格将均匀分布。 初始点 为了让你开始,这里有一些代码。...Grid 视图使用起来非常简单,并且添加到我们已经拥有的现有布局容器视图中。

4.3K20

Material Design — 网格列表(Grid lists)

网格列表 网格列表(Grid lists) 网格列表是标准列表视图的替代方法。 Grid lists由以垂直和水平布局排列的cell重复后组成。 Grid lists最适用于同质数据类型。...类型 仅图像 单行文本(可带图标) 两行文字(可带图标) 操作 垂直滚动 筛选 替代 Lists Cards ---- 用法 网格列表最适合呈现同类数据,通常为图像,并且针对视觉理解和区分类似数据类型进行了优化...一个明显的例外是水平滚动的单行图像grid list,例如图库,它与典型的阅读模式相符合。 切断grid lists初始滚动位置中的网格图块,以传递出内容溢出的滚动方向。 ?...它们保持固定的图像宽度,高度和padding。 margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离。...(外边距) padding是指自身边框到自身内部另一个容器边框之间的距离,就是容器内距离。(内边距)

3.5K120

CSS基础知识巩固你的前端基础

css中常用的伪类如下表所示: 伪类名 说明 :active 被激活的元素添加样式 :focus 拥有输入焦点的元素添加样式 :hover 鼠标悬停在上方的元素添加样式 :link 未被访问的链接添加样式...:visited 已被访问的链接添加样式 :first-child 元素添加样式,且该元素是它的父元素的第一个子元素 :lang 带有指定lang属性的元素添加样式 伪元素选择器 css中常用的伪元素如下表所示...: 伪元素名 说明 :first-letter 文本的第一个字母添加样式 :first-line 文本的第一行添加样式 :after 在元素之后添加内容 :before 在元素之前添加内容 css...background-attachment用于设置背景图像是否固定或者随着页面的其余部分滚动。默认值为: scroll,表示可以随着页面其余部分的滚动滚动。...,设置元素中文本的水平方式,值有left,right,center,inherit。

2K10

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

image-20220822161247454点击切换按钮定位到对应的搜索结果为 TranscriptionRow 视图添加显式标识符,并通过 ScrollViewProxy 滚动到指定的位置。...请阅读 优化在 SwiftUI List 中显示大数据集的响应效率[6] 以及 避免 SwiftUI 视图的重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动到的...视图中打开 URL 的若干方法[10] 一文,了解更多有关 OpenURLAction 的内容创建体验感优秀的搜索条使用 safeAreaInset 添加搜索栏在没有 safeAreaInset 修饰器的时候...,我们通常会用两种方式添加搜索栏 —— 1、通过 VStack 将搜索栏放置在 List 下方,2、使用 overlay 将搜索栏放置在 List 视图的上层。...视图的重复计算: https://www.fatbobman.com/posts/avoid_repeated_calculations_of_SwiftUI_views/[8] 了解 SwiftUI

4.2K30

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

此时请不要惊讶,你可以尝试点击添加数据按钮继续增加数据,再次滚动到底部,你将看到更加令人震惊的内存占用数值,不过有极大的可能会看不到( 应用已经崩溃了 )。...在正常的情况下( 惰性容器中仅包含一个 ForEach ,且子视图没有使用 id 添加显式标识 ),惰性容器仅会创建当前可见范围内的子视图实例,并对其 body 进行求值( 渲染 )。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图的 body 值。...在本例中,子视图的 body 值中一定会包含用于显示的图片数据,因此,即使该视图已经被显示过( 滚动出显示区域 ),该视图的 body 值仍将占用不小的内存。...并根据上下文的需要,用对应的数据特定的托管对象进行填充( 实例化 )。

1.2K10

iOS14 致敬 Android 之 Meet Widget

在你的应用中添加 Widget 将 Widget 添加到 App 中需要进行少量的设置,并且将使用 SwiftUI 来展示他的内容。...•Placeholder View:WidgetKit 使用一个 SwiftUI 视图来首次渲染。占位符是 Widget 的通用表示形式,没有特定的配置或数据。...•Content Closure:包含 SwiftUI 视图的关闭。WidgetKit 调用此方法来渲染 Widget 内容,并从 provider 传递 TimelineEntry 参数。...占位符视图显示您 Widget 的一般表示形式,使用户可以大致了解 Widget 的显示内容。不要在占位符视图中包含实际数据。例如,使用灰色框表示文本行,或使用灰色圆圈表示图像。...在 Widget 中显示内容 Widget 通常通过组合使用 SwiftUI 视图定义内容。

1.4K20

SwiftUI 中布局的工作原理

为了演示这些规则的实际操作,我希望您修改默认的 SwiftUI 模板以添加background()修饰符,如下所示: struct ContentView: View { var body: some...中,我您解释过,当您对视图应用修饰符时,我们实际上会得到一个名为ModifiedContent的新视图类型,它存储了原始视图及其修饰符。...嘿,SwiftUI:我需要X * Y像素。” SwiftUI:“好的。那么,这会留下很多空间,所以我会把你的尺寸放在中间。”(父视图在其坐标空间中定位子视图。)...然后,当答案从文本视图返回时,padding()根据请求在每侧添加20个点来填充它。 所以,更像这样: SwiftUI:ContentView,你可以拥有整个屏幕,你需要多少?...然后 frame 会询问里面的图像它想要什么尺寸。 不可调整大小的图像返回固定大小例如:64x64。 然后 frame 将图像定位在其自身的中心。

3.7K20

如何在 SwiftUI 中创建条形图

系列文章 如何在 SwiftUI 中创建条形图 SwiftUI 中的水平条形图 在 iOS 16 中用 SwiftUI Charts 创建一个折线图 在 iOS16 中用 SwiftUI 图表定制一个线图...在 Swift 图表中使用 Foudation 库中的测量类型 开始图表布局 SwiftUI 对探索不同布局和预览实时视图结果是很友好的。...国家名称那样较长的文本,显示出条形图下面的文本将条形图推到了线外。...图标被设置为固定大小,视图被嵌入到 ScrollView 中,以便在设备旋转时滚动。...SwiftUI 是一个很好的平台,用于创建视图和快速重构独立的子视图。在 SwiftUI 中构建条形图需要做一些工作,随着使用数据来试用条形图,可以确定更多的定制化。

5.1K10

SwiftUI 布局协议 - Part 1

但是不用担心,目前为止你可以认为它们就是视图并且像视图一样使用它们。这个框架使用了漂亮的 Swift 语言技巧使你的布局代码在 SwiftUI 中插入时产生一个透明视图 。...一旦我们计算好所有理想尺寸,我们可以通过添加视图宽度和视图间距来计算容器尺寸。从高度上来说,我们的视图将会和最高子视图一样高。...有红色边框视图是 SimpleHStack ,黑色边框视图是标准的 HStack 容器,绿色边框的表示封闭的 VStack 。...一个视图可以拥有不同间距,如果旁边是文本视图和旁边是图像间距是不一样的。除此之外,每个边缘都会有自己的偏好。 所以我们应该如何用 SimpleHStack 让它们行为一致?...无论如何,在没有缓存的情况下编写我们的布局更简单一点,当我们以后需要时再添加SwiftUI 已经做了一些缓存。例如,从子视图代理获得的值会自动存储在缓存中。相同的参数的反复调用将会使用缓存结果。

3.2K10

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

此时请不要惊讶,你可以尝试点击添加数据按钮继续增加数据,再次滚动到底部,你将看到更加令人震惊的内存占用数值,不过有极大的可能会看不到( 应用已经崩溃了 )。...在正常的情况下( 惰性容器中仅包含一个 ForEach ,且子视图没有使用 id 添加显式标识 ),惰性容器仅会创建当前可见范围内的子视图实例,并对其 body 进行求值( 渲染 )。...尽管从表面上来看,惰性容器仅会在视图进入可视区域时才会对其进行操作,但一旦该视图被显示过( body 被求过值 ),即使该视图离开可视区域,SwiftUI 仍会保存视图的 body 值。...在本例中,子视图的 body 值中一定会包含用于显示的图片数据,因此,即使该视图已经被显示过( 滚动出显示区域 ),该视图的 body 值仍将占用不小的内存。...并根据上下文的需要,用对应的数据特定的托管对象进行填充( 实例化 )。

2.4K40
领券