区块链技术博客
www.b2bchain.cn

WWDC20 10031 – SwiftUI 中的堆栈,网格和轮廓求职学习资料

本文介绍了WWDC20 10031 – SwiftUI 中的堆栈,网格和轮廓求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • 概括
  • 多种内置布局原始类型
  • 探索原理
  • 总结
  • 下载源码
  • 译者体会

概括

改进后的堆栈以及新的列表和大纲视图可更快,更有效地在SwiftUI应用中显示详细数据。大纲现已首次在iOS和iPadOS上提供,它是一种新的多平台工具,用于表达与堆栈和列表一起使用的分层数据。了解如何在SwiftUI中使用新的和改进的工具在使用表视图时在屏幕上显示更多内容,创建平滑滚动和响应式堆栈以及为vStack不能提供的内容构建列表视图。使用新的网格视图以及显示组,可以进一步扩展布局选项。为了充分利用该视频,我们建议您首先查看“ SwiftUI App Essentials”,它概述了2020年SwiftUI的所有新功能。如果您是SwiftUI编码的新手,我们还建议您观看2019年的“ SwiftUI Essentials”演讲。

本文基于 WWDC20 – Embrace Swift type inference 梳理

SwiftUI 多种内置布局原始类型

SwiftUI 具有多种内置布局原始类型,用于按水平和垂直顺序排列视图集合。这些原始类型可以单独用于满足基本的布局需求,也可以将它们组合在一起以构建具有自定义行为的复杂视图。 macOS 中的新通知中心是通过 SwiftUI 实现的,它是工作中这种组合过程的一个很好的例子。简单的堆栈和网格使用层次结构,对齐方式和间距一起配合以整理大量信息,最终结果既美观又可用。在开发自己的应用程序时,我也建议您以类似的方式考虑。
SwiftUI 的布局的原始类型在设计时就考虑了多种布局方式的组合。通常,当一个简单类型不能完成您需要做的所有事情时,最好的方法就是将它与另一个具有互补行为的简单类型结合起来。

Stacks

我们将从堆栈开始,这是 SwiftUI 中最简单的布局原始类型。但是首先,为了谈论堆叠,我需要举三明治为例。如果您听了《 SwiftUI 简介》演讲,您会知道我的朋友 Jacob 一直在努力制作三明治应用。我想自己是个三明治鉴赏家,我认为将 Jacob 的应用程序放到画廊视图中展示特别难忘的午餐照片会很有趣。

我要使用的数据模型非常简单:
WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

  • ID
  • 名称
  • 星级
  • 画廊的英雄形象

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

在画廊中显示单个三明治的视图也同样简单。它显示可调整大小的英雄图像,并添加一个包含有关三明治信息的覆盖图。覆盖每个英雄图像的横幅视图使用 VStack 排列三明治的标题和星级评定指示器。星级只是图像的水平叠放。我最初的实现非常简单。我在展示我的画廊时使用的是一叠垂直的三明治视图。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓
WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

使用 Lazy

随着拍摄更多照片,我的三明治列表将动态增长,因此我需要包含一个 ForEach 视图,该视图将枚举每个三明治并为每个三明治做一个视图。此外,堆栈不会自行滚动。因此,我需要将所有内容包装在滚动视图中。到目前为止,我对此非常满意。但是,当我开始在三明治照片的后部目录中加载时,我开始注意到一个问题。我的画廊需要显示的照片越多,显示时屏幕变得响应时间就越长。我想要的是一个惰性堆栈,该堆栈可以逐步构建自身,这样一开始,只有第一个充满图像的屏幕才需要渲染。其余的可以在用户滚动浏览图库时按需加载。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

我们将引入两种新的 SwiftUI 堆栈类型,它们可以直接解决此问题。 LazyVStack 和 LazyHStack。懒惰堆栈就像它们的 VStack 和 HStack 对应对象一样,只不过它们在可见时会逐渐递增其内容。这非常适合我的需求。该视图不会阻止主线程加载和测量每个图像,并且该应用程序的内存占用不会不必要地增大。我需要做的就是用 LazyVStack 替换我的 VStack,现在我的图库会逐渐加载。我想在这里提出另外一点。如果您从评级视图的定义中回想起,定义英雄视图库的垂直堆栈并不是此处显示的唯一堆栈。每个英雄视图都有自己的水平堆栈来布置星级评定指示器,还有一个 ZStack 可以将等级覆盖在英雄图像的顶部。

注意,不是所以视图都需要 lazy。 由于我使外部堆栈变得很懒,所以这些堆栈也应该也很懒吗?在这种情况下,答案是否定的。虽然我希望垂直堆栈特别懒惰,因为它可以滚动,但是我不想花时间在大多数内容不滚动而无法看到的情况下预先渲染所有内容。另一方面,使给定英雄视图中的堆栈变得懒惰实际上并没有带来任何好处。该视图一出现在屏幕上,内容就立即可见,因此无论容器的默认行为如何,都必须立即加载所有内容。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

Grids

使用 LazyVGrid,我可以轻松实现多列布局以增加视图的三明治密度。让我们看一下它是如何工作的。这是我们之前看到的,为 iPad 扩展的同一个惰性堆栈。我将其更新为三列三明治,而不是一列。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

与前面的示例的主要区别是我的布局容器。我使用 LazyVGrid 而不是 LazyVStack ,并且传递了一组值,这些值告诉 SwiftUI 如何计算网格中列的宽度。除了列描述之外,我还像定义堆栈一样定义了网格,方法是传入视图构建器以生成构成网格的各个视图。为了描述网格的列,我创建了一个 GridItem 值数组。每一项都指定如何计算单个列的宽度。在这里,我定义了三列。 GridItems 默认情况下是灵活的,因此这种安排将用等宽的列填充网格。这与横向相同。列数是相同的,只是更宽。网格布局还可以适应可用于创建可变列数的空间。例如,在这里,我声明了一个自适应网格项,该网格项在保持指定的最小列宽的同时,会产生尽可能多的等宽列。这对于横向模式非常有用,在横向模式中有足够的空间容纳更多列。自适应网格项在 macOS 上也非常有用,在 macOS 中,可以任意调整窗口的大小。这些新原始类型的表现力令我感到非常兴奋。我想在移交给 Curt 之前讨论的最后一个主题是列表。列表不仅仅是基本的布局基元。它们是交互式的,并支持选择管理和滚动。列表内容总是延迟加载。现在我不认识你,但是到那时我已经吃了很多三明治。

让我们看一下 Curt 一直在开发的一个很酷的新应用,名为 Shape Edit。 Shape Edit 是基于文档的应用程序,可在 macOS,iPadOS 和 iOS 上运行。如果放大,我们可以在 Shape Edit 中看到 Windows 边栏视图,其中我们使用了一个列表来枚举画布中的形状。我们当前在画布上有一组图形,并使用图形数组填充侧栏中的内容行,从而生成平面形状列表。超酷。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

我在使用此应用程序的过程中一直玩得很开心,以至于我被启发添加一个功能来将形状收集到组中。组还可以包含其他组,因此我们的平面列表现在需要表示任意深的元素树。

我们在 List 中添加了一个新功能,非常适合此需求,我很乐于谈它。要将列表变成轮廓,我只需要告诉列表如何遍历数据树即可。

  • 概括
  • 多种内置布局原始类型
  • 探索原理
  • 总结
  • 下载源码
  • 译者体会

概括

改进后的堆栈以及新的列表和大纲视图可更快,更有效地在SwiftUI应用中显示详细数据。大纲现已首次在iOS和iPadOS上提供,它是一种新的多平台工具,用于表达与堆栈和列表一起使用的分层数据。了解如何在SwiftUI中使用新的和改进的工具在使用表视图时在屏幕上显示更多内容,创建平滑滚动和响应式堆栈以及为vStack不能提供的内容构建列表视图。使用新的网格视图以及显示组,可以进一步扩展布局选项。为了充分利用该视频,我们建议您首先查看“ SwiftUI App Essentials”,它概述了2020年SwiftUI的所有新功能。如果您是SwiftUI编码的新手,我们还建议您观看2019年的“ SwiftUI Essentials”演讲。

本文基于 WWDC20 – Embrace Swift type inference 梳理

SwiftUI 多种内置布局原始类型

SwiftUI 具有多种内置布局原始类型,用于按水平和垂直顺序排列视图集合。这些原始类型可以单独用于满足基本的布局需求,也可以将它们组合在一起以构建具有自定义行为的复杂视图。 macOS 中的新通知中心是通过 SwiftUI 实现的,它是工作中这种组合过程的一个很好的例子。简单的堆栈和网格使用层次结构,对齐方式和间距一起配合以整理大量信息,最终结果既美观又可用。在开发自己的应用程序时,我也建议您以类似的方式考虑。
SwiftUI 的布局的原始类型在设计时就考虑了多种布局方式的组合。通常,当一个简单类型不能完成您需要做的所有事情时,最好的方法就是将它与另一个具有互补行为的简单类型结合起来。

Stacks

我们将从堆栈开始,这是 SwiftUI 中最简单的布局原始类型。但是首先,为了谈论堆叠,我需要举三明治为例。如果您听了《 SwiftUI 简介》演讲,您会知道我的朋友 Jacob 一直在努力制作三明治应用。我想自己是个三明治鉴赏家,我认为将 Jacob 的应用程序放到画廊视图中展示特别难忘的午餐照片会很有趣。

我要使用的数据模型非常简单:
WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

  • ID
  • 名称
  • 星级
  • 画廊的英雄形象

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

在画廊中显示单个三明治的视图也同样简单。它显示可调整大小的英雄图像,并添加一个包含有关三明治信息的覆盖图。覆盖每个英雄图像的横幅视图使用 VStack 排列三明治的标题和星级评定指示器。星级只是图像的水平叠放。我最初的实现非常简单。我在展示我的画廊时使用的是一叠垂直的三明治视图。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓
WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

使用 Lazy

随着拍摄更多照片,我的三明治列表将动态增长,因此我需要包含一个 ForEach 视图,该视图将枚举每个三明治并为每个三明治做一个视图。此外,堆栈不会自行滚动。因此,我需要将所有内容包装在滚动视图中。到目前为止,我对此非常满意。但是,当我开始在三明治照片的后部目录中加载时,我开始注意到一个问题。我的画廊需要显示的照片越多,显示时屏幕变得响应时间就越长。我想要的是一个惰性堆栈,该堆栈可以逐步构建自身,这样一开始,只有第一个充满图像的屏幕才需要渲染。其余的可以在用户滚动浏览图库时按需加载。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

我们将引入两种新的 SwiftUI 堆栈类型,它们可以直接解决此问题。 LazyVStack 和 LazyHStack。懒惰堆栈就像它们的 VStack 和 HStack 对应对象一样,只不过它们在可见时会逐渐递增其内容。这非常适合我的需求。该视图不会阻止主线程加载和测量每个图像,并且该应用程序的内存占用不会不必要地增大。我需要做的就是用 LazyVStack 替换我的 VStack,现在我的图库会逐渐加载。我想在这里提出另外一点。如果您从评级视图的定义中回想起,定义英雄视图库的垂直堆栈并不是此处显示的唯一堆栈。每个英雄视图都有自己的水平堆栈来布置星级评定指示器,还有一个 ZStack 可以将等级覆盖在英雄图像的顶部。

注意,不是所以视图都需要 lazy。 由于我使外部堆栈变得很懒,所以这些堆栈也应该也很懒吗?在这种情况下,答案是否定的。虽然我希望垂直堆栈特别懒惰,因为它可以滚动,但是我不想花时间在大多数内容不滚动而无法看到的情况下预先渲染所有内容。另一方面,使给定英雄视图中的堆栈变得懒惰实际上并没有带来任何好处。该视图一出现在屏幕上,内容就立即可见,因此无论容器的默认行为如何,都必须立即加载所有内容。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

Grids

使用 LazyVGrid,我可以轻松实现多列布局以增加视图的三明治密度。让我们看一下它是如何工作的。这是我们之前看到的,为 iPad 扩展的同一个惰性堆栈。我将其更新为三列三明治,而不是一列。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

与前面的示例的主要区别是我的布局容器。我使用 LazyVGrid 而不是 LazyVStack ,并且传递了一组值,这些值告诉 SwiftUI 如何计算网格中列的宽度。除了列描述之外,我还像定义堆栈一样定义了网格,方法是传入视图构建器以生成构成网格的各个视图。为了描述网格的列,我创建了一个 GridItem 值数组。每一项都指定如何计算单个列的宽度。在这里,我定义了三列。 GridItems 默认情况下是灵活的,因此这种安排将用等宽的列填充网格。这与横向相同。列数是相同的,只是更宽。网格布局还可以适应可用于创建可变列数的空间。例如,在这里,我声明了一个自适应网格项,该网格项在保持指定的最小列宽的同时,会产生尽可能多的等宽列。这对于横向模式非常有用,在横向模式中有足够的空间容纳更多列。自适应网格项在 macOS 上也非常有用,在 macOS 中,可以任意调整窗口的大小。这些新原始类型的表现力令我感到非常兴奋。我想在移交给 Curt 之前讨论的最后一个主题是列表。列表不仅仅是基本的布局基元。它们是交互式的,并支持选择管理和滚动。列表内容总是延迟加载。现在我不认识你,但是到那时我已经吃了很多三明治。

让我们看一下 Curt 一直在开发的一个很酷的新应用,名为 Shape Edit。 Shape Edit 是基于文档的应用程序,可在 macOS,iPadOS 和 iOS 上运行。如果放大,我们可以在 Shape Edit 中看到 Windows 边栏视图,其中我们使用了一个列表来枚举画布中的形状。我们当前在画布上有一组图形,并使用图形数组填充侧栏中的内容行,从而生成平面形状列表。超酷。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

我在使用此应用程序的过程中一直玩得很开心,以至于我被启发添加一个功能来将形状收集到组中。组还可以包含其他组,因此我们的平面列表现在需要表示任意深的元素树。

我们在 List 中添加了一个新功能,非常适合此需求,我很乐于谈它。要将列表变成轮廓,我只需要告诉列表如何遍历数据树即可。

  • 概括
  • 多种内置布局原始类型
  • 探索原理
  • 总结
  • 下载源码
  • 译者体会

概括

改进后的堆栈以及新的列表和大纲视图可更快,更有效地在SwiftUI应用中显示详细数据。大纲现已首次在iOS和iPadOS上提供,它是一种新的多平台工具,用于表达与堆栈和列表一起使用的分层数据。了解如何在SwiftUI中使用新的和改进的工具在使用表视图时在屏幕上显示更多内容,创建平滑滚动和响应式堆栈以及为vStack不能提供的内容构建列表视图。使用新的网格视图以及显示组,可以进一步扩展布局选项。为了充分利用该视频,我们建议您首先查看“ SwiftUI App Essentials”,它概述了2020年SwiftUI的所有新功能。如果您是SwiftUI编码的新手,我们还建议您观看2019年的“ SwiftUI Essentials”演讲。

本文基于 WWDC20 – Embrace Swift type inference 梳理

SwiftUI 多种内置布局原始类型

SwiftUI 具有多种内置布局原始类型,用于按水平和垂直顺序排列视图集合。这些原始类型可以单独用于满足基本的布局需求,也可以将它们组合在一起以构建具有自定义行为的复杂视图。 macOS 中的新通知中心是通过 SwiftUI 实现的,它是工作中这种组合过程的一个很好的例子。简单的堆栈和网格使用层次结构,对齐方式和间距一起配合以整理大量信息,最终结果既美观又可用。在开发自己的应用程序时,我也建议您以类似的方式考虑。
SwiftUI 的布局的原始类型在设计时就考虑了多种布局方式的组合。通常,当一个简单类型不能完成您需要做的所有事情时,最好的方法就是将它与另一个具有互补行为的简单类型结合起来。

Stacks

我们将从堆栈开始,这是 SwiftUI 中最简单的布局原始类型。但是首先,为了谈论堆叠,我需要举三明治为例。如果您听了《 SwiftUI 简介》演讲,您会知道我的朋友 Jacob 一直在努力制作三明治应用。我想自己是个三明治鉴赏家,我认为将 Jacob 的应用程序放到画廊视图中展示特别难忘的午餐照片会很有趣。

我要使用的数据模型非常简单:
WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

  • ID
  • 名称
  • 星级
  • 画廊的英雄形象

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

在画廊中显示单个三明治的视图也同样简单。它显示可调整大小的英雄图像,并添加一个包含有关三明治信息的覆盖图。覆盖每个英雄图像的横幅视图使用 VStack 排列三明治的标题和星级评定指示器。星级只是图像的水平叠放。我最初的实现非常简单。我在展示我的画廊时使用的是一叠垂直的三明治视图。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓
WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

使用 Lazy

随着拍摄更多照片,我的三明治列表将动态增长,因此我需要包含一个 ForEach 视图,该视图将枚举每个三明治并为每个三明治做一个视图。此外,堆栈不会自行滚动。因此,我需要将所有内容包装在滚动视图中。到目前为止,我对此非常满意。但是,当我开始在三明治照片的后部目录中加载时,我开始注意到一个问题。我的画廊需要显示的照片越多,显示时屏幕变得响应时间就越长。我想要的是一个惰性堆栈,该堆栈可以逐步构建自身,这样一开始,只有第一个充满图像的屏幕才需要渲染。其余的可以在用户滚动浏览图库时按需加载。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

我们将引入两种新的 SwiftUI 堆栈类型,它们可以直接解决此问题。 LazyVStack 和 LazyHStack。懒惰堆栈就像它们的 VStack 和 HStack 对应对象一样,只不过它们在可见时会逐渐递增其内容。这非常适合我的需求。该视图不会阻止主线程加载和测量每个图像,并且该应用程序的内存占用不会不必要地增大。我需要做的就是用 LazyVStack 替换我的 VStack,现在我的图库会逐渐加载。我想在这里提出另外一点。如果您从评级视图的定义中回想起,定义英雄视图库的垂直堆栈并不是此处显示的唯一堆栈。每个英雄视图都有自己的水平堆栈来布置星级评定指示器,还有一个 ZStack 可以将等级覆盖在英雄图像的顶部。

注意,不是所以视图都需要 lazy。 由于我使外部堆栈变得很懒,所以这些堆栈也应该也很懒吗?在这种情况下,答案是否定的。虽然我希望垂直堆栈特别懒惰,因为它可以滚动,但是我不想花时间在大多数内容不滚动而无法看到的情况下预先渲染所有内容。另一方面,使给定英雄视图中的堆栈变得懒惰实际上并没有带来任何好处。该视图一出现在屏幕上,内容就立即可见,因此无论容器的默认行为如何,都必须立即加载所有内容。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

Grids

使用 LazyVGrid,我可以轻松实现多列布局以增加视图的三明治密度。让我们看一下它是如何工作的。这是我们之前看到的,为 iPad 扩展的同一个惰性堆栈。我将其更新为三列三明治,而不是一列。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

与前面的示例的主要区别是我的布局容器。我使用 LazyVGrid 而不是 LazyVStack ,并且传递了一组值,这些值告诉 SwiftUI 如何计算网格中列的宽度。除了列描述之外,我还像定义堆栈一样定义了网格,方法是传入视图构建器以生成构成网格的各个视图。为了描述网格的列,我创建了一个 GridItem 值数组。每一项都指定如何计算单个列的宽度。在这里,我定义了三列。 GridItems 默认情况下是灵活的,因此这种安排将用等宽的列填充网格。这与横向相同。列数是相同的,只是更宽。网格布局还可以适应可用于创建可变列数的空间。例如,在这里,我声明了一个自适应网格项,该网格项在保持指定的最小列宽的同时,会产生尽可能多的等宽列。这对于横向模式非常有用,在横向模式中有足够的空间容纳更多列。自适应网格项在 macOS 上也非常有用,在 macOS 中,可以任意调整窗口的大小。这些新原始类型的表现力令我感到非常兴奋。我想在移交给 Curt 之前讨论的最后一个主题是列表。列表不仅仅是基本的布局基元。它们是交互式的,并支持选择管理和滚动。列表内容总是延迟加载。现在我不认识你,但是到那时我已经吃了很多三明治。

让我们看一下 Curt 一直在开发的一个很酷的新应用,名为 Shape Edit。 Shape Edit 是基于文档的应用程序,可在 macOS,iPadOS 和 iOS 上运行。如果放大,我们可以在 Shape Edit 中看到 Windows 边栏视图,其中我们使用了一个列表来枚举画布中的形状。我们当前在画布上有一组图形,并使用图形数组填充侧栏中的内容行,从而生成平面形状列表。超酷。

WWDC20 10031 - SwiftUI 中的堆栈,网格和轮廓

我在使用此应用程序的过程中一直玩得很开心,以至于我被启发添加一个功能来将形状收集到组中。组还可以包含其他组,因此我们的平面列表现在需要表示任意深的元素树。

我们在 List 中添加了一个新功能,非常适合此需求,我很乐于谈它。要将列表变成轮廓,我只需要告诉列表如何遍历数据树即可。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » WWDC20 10031 – SwiftUI 中的堆栈,网格和轮廓求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们