Skip to main content

86 篇文章 包含 "swiftUI"

查看所有标签

1、@State

当一个state只属于一个View,而且我们需要这个state去驱动我们的UI,那我们标记这个state为@State。

1、使用LazyHStack和LazyVStack

SwiftUI 2.0 引入了LazyHStack和LazyVStack。它们的使用类似于常规的HStack和VStack,但提供了延迟加载。仅在content在设备的屏幕上变得可见前,List才开始加载content,允许用户无缝地滚动浏览大型数据集,没有明显的 UI 延迟或较长的加载时间。让我们创建一个demo来看看它在实践中是如何工作的。

1、预览黑暗模式

SwiftUI内置支持黑暗模式。你只需要修改预览的设置,就能预览黑暗模式。

1、在Form中显示隐藏sections

Form提供了一种从用户那里获取信息的方法。但是表格很长时,用户在完成时会感到气馁,提交表格的人很少 意味着您的调查数据更少,您的应用程序注册更少,或者提供您收集的任何数据的人更少。

10、创建一个弹性Header

什么是弹性Header?还记得你有个TableView,header是一个图片,当往下拉动tableview时,header的图片会放大。

10、使用可搜索列表

列表视图可以包含一个到无数个item。随着列表中item数的增加,我们通常会提供在列表中搜索特定item的能力。

10、已有App中使用SwiftUI

本章,我们将学习如何从 UIKit 视图跳转到 SwiftUI 视图,同时将文本传递给我们的 SwiftUI 视图。

12、创建一个card-stack

还记得我们自定义UICollectionLayout时做的那种卡片效果么,多个卡片叠在一起,我们可以用滑动手势将顶部卡片移走,显示出下面的卡片。现在我们用swiftui实现同样的功能。

2、@Binding

我们上一篇讲了@State,如果我们有其他VIew要修改我们的State呢?

2、创建static items List

List 和ScrollView类似,都是用来显示一个Items的集合。不同的是List更适合处理较大的数据集,因为它们不会将整个数据集加载到内存中。

2、开启和禁用Form中的某些items

表单中的某些地方可能有额外的要求,例如最小文本长度或组合大写和小写字符。我们可能想要根据 用户的输入,禁用提交按钮,直到满足所有要求。

2、一个定时器App

当我们subscribe一个publisher后,这个结果需要存储到某个地方,通常我们都是通过调用.store方法存储在某个 AnyCancellable Set中。但是每个都这么用,可能会显得有点重复,我们将用@ResultBuilder来包裹所有的subscribtion,将所有AnyCancellable放到同一个set中。

2、预览动态字体dynamicTypeSize

您可能希望改进应用的一些功能以吸引更多的用户 。比如:用户可能喜欢的不同字体,这意味着要确保设计在不同字体大小下看起来不错。SwiftUI 预览非常适合此类情况。它们允许您立即预览新内容在不同动态字体大小下的外观。

2、自定义动画属性

上一篇文章中我们知道了,Swiftui能够对一些通用属性进行动画,比如:位置、颜色、大小等。

3、@ObservedObject

我们使用@State时有一点我们可能并没有注意到,那就是多数时候都是修饰基础类型,或者struct,如果我们用@State去修饰引用类型呢?这就要小心了,因为改变引用类型内部的变量,SwiftUI并不能感知到,所以你的修改可能并不能反应到UI上。

3、使用Focus和Submit

如果用户必须手动单击每个字段,填写它,然后单击填写下一个,这可能会很乏味。一个更容易和更快的方法是使用键盘上的按钮从一个表单字段跳转到下一个。

3、下拉刷新

下拉刷新的功能很常见,在swiftui中也有支持,并且支持async/await。

3、显示pdf

我们使用PDFKit的PdfView显示pdf。不过SwiftUI要用得将其包裹为View。

3、Combine和Form

本章,我们将实现一个简单的注册页面,其中包含一个用户名输入框和两个密码输入框,一个用于密码,另一个用于确认密码。

3、List中使用自定义Cell

如果我们每次都要用到相同的Cell,而每次都重复写一些HStack肯定不是一个好的选择,此时我们可以把这些View封装成一个Cell,增加代码的可重用性。

4、@StateObject

一开始@ObservedObject是被用来把逻辑从View中分离出去的。

4、使用TabView

NavigationView比较适合有层次的数据,但不太适合不想关的数据。TabView就是用来组织这种数据的。

4、显示sheets

SwiftUI使用sheets来present新的View(类似于UIKit的present功能),允许你往下拖动,让弹出的View消失。

4、用修饰符的delay创建一组动画

目前已经是SwiftUI 3 了,但仍然无法将不同的动画连接在一起以创建一组动画。这肯定会在以后的 SwiftUI 版本中修复,但目前,我们可以使用延迟来实现一组动画。

5、代码切换TabView的Tab

在上一篇文章中,我们介绍了如何点击底部tab,跳转不同界面。然而,我们有时候也想通过代码触发跳转。

5、调试Combine

本章,我们将学习调试Combine Stream的三种方法。我承认这三个都有点基础。但是,它们是一个起点,应该足以帮助我们了解如何处理stream中的错误。

5、显示context menus

context menus是一个弹出菜单,用于显示开发人员预期用户可能会执行的操作。context menus在 iOS 上是通过 3D Touch 触发和 macOS 上的右键单击触发。

5、预览UIKit

如果您喜欢轻松预览 UI 更改,但您的项目又只是UIkit,那么请放心 因为你也可以在构建 UIKit 应用程序时使用这个强大的功能。

6、同时进行多个animation

SwiftUI 允许 我们可以同时为多个属性设置动画,也可以使用不同的持续时间和不同的动画曲线对它们进行动画处理。

6、显示popovers

弹出框是一种可以显示在屏幕上以提供有关特定项目的更多信息的视图。它们包括一个箭头,指向它们起源的位置。你可以点击任何其他屏幕区域以关闭弹出窗口。弹出框通常用于较大的屏幕,例如 iPad。

6、预览mock数据

通常我们获取数据是通过 API 调用。但这可能很耗时,并很快成为瓶颈。更快的选择是仅在构建时提供一些mock数据。

7、使用渐变

SwiftUI 有几种渲染渐变的方式。渐变可用于填充 一个Shape,填充一个边框等。

8、创建一个hero transition

什么是hero transition?还记得我们的商品列表有个图片,点击图片,然后图片慢慢变大,成为新界面顶部的header,我们称这种为hero transition。比如:appstroe中就很常见。

8、绘制柱状图

使用简单的形状,可以构建一些不错的功能。例如,只需使用一堆矩形,我们就可以创建一个柱状图。

9、绘制饼状图

我们知道饼图是一种通过使用形成圆圈的切片来表示比例数值的方法。饼图由一个切片和一个圆组成, 在 SwiftUI 中实现它们非常简单。

9、将集合绑定到List

在 SwiftUI 中一直可以编辑列表,但在 WWDC 2021 和 SwiftUI 3 之前,这样做非常 效率低下,因为 SwiftUI 不支持绑定到集合。让我们在集合上使用绑定并讨论它现在如何以及为什么更好地工作。

9、SwiftUI中使用UIKit

SwiftUI 是 在 WWDC 2019 上宣布 的,仅适用于运行 iOS 13 及更高版本的设备。由于其相对不成熟,与 UIKit 相比,SwiftUI 可能缺乏广泛的 API 支持。例如,截至 2021 年 7 月,只能使用 UIKit 的UIImagePickerController选择图片和视频。因此,需要在 SwiftUI 中实现某些 UIKit API。