Swift UI 3

文章介绍了SwiftUI中的各种布局组件,如HStack(水平堆栈)和VStack(垂直堆栈)的用法,以及如何根据屏幕尺寸动态使用ScrollView。还讨论了如何通过ZStack实现标签栏动画,以及如何使用renderingMode(.template)调整图像的渲染方式以适应不同背景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Part 1 视频学习

存储文本字段值需要使用字符串进行存储

Textfieled建立文本框

文本框没有限制数字

美元符号绑定自动文本使用文本框进行文字输入处理确定键盘类型  新建一个键盘text使用美元符号进行双向绑定navigation进行添加导航视图使用for each进行强制循环

                                                      增加标签头使用header

Part 2 代码以及函数学习

Scrollview

  • 这段代码在 SwiftUI 中根据设备屏幕高度来确定是否使用 ScrollView 来包装内容。如果设备屏幕高度小于 750,即 iPhone SE(第一代)和 iPhone 8 Plus 以下的设备,则使用 ScrollView 包装内容,以确保内容在较小的屏幕上能够滚动查看。否则,如果设备屏幕高度大于等于 750,则直接显示内容,因为较大的屏幕可以容纳更多内容而无需滚动。
  • 1. if 分支:在设备屏幕高度小于 750 时,创建一个 ScrollView,并在其中包含 Home 视图,同时设置 showsIndicators 参数为 false,以隐藏滚动指示器。
  • 2. else 分支:在设备屏幕高度大于等于 750 时,直接显示 Home 视图,而不使用 ScrollView 包装。
  • 这种做法在设计自适应界面时

HStack

  • 1. `HStack(spacing: 0) { ... }`:这是一个水平方向的堆栈 (HStack),它将其中的子视图水平排列。通过 `spacing: 0` 参数设置了子视图之间的间距为 0,这意味着子视图之间没有间距,它们会紧密排列在一起。
  • 2. `Button(action:{ ... }) { ... }`:在这个`HStack`中,您有一个按钮。按钮是一个交互式的视图,用户可以点击它来执行指定的操作。在这个按钮中,指定了一个动作 (action),当用户点击按钮时,这个动作将被触发。
  • 3. `withAnimation(.spring()) { index = 0 }`:在按钮的动作 (action) 中,使用 `withAnimation(.spring())` 来指定一个带有弹簧效果的动画。在动画中,`index` 的值被设置为 0。`index` 可能是一个状态变量,用于控制视图的状态或导航等。
  • 这段代码的作用是创建一个水平堆栈,其中包含一个按钮。当用户点击按钮时,通过动画将 `index` 的值设置为 0,而动画效果为带有弹簧效果的过渡。
  • 这段代码创建了一个 ZStack,其中包含两个 Capsule,用于显示一个底部条和一个被选中的标签。1. `ZStack { ... }`:这是一个 ZStack,用于创建一个重叠的视图层级。
  • 2. `Capsule().fill(Color.black.opacity(0.04))`:第一个 Capsule 用于显示底部条。它的填充颜色为黑色,不透明度为 0.04,使其呈现出浅灰色的效果。该 Capsule 的高度设置为 4。
  • 3. `if index == 0 { ... }`:这是一个条件语句,用于根据变量 `index` 的值决定是否显示第二个 Capsule。如果 `index` 等于 0,则显示第二个 Capsule,否则不显示。
  • 4. `Capsule().fill(Color("Color"))`:第二个 Capsule 用于显示被选中的标签。它的填充颜色使用名为 "Color" 的颜色资源来确定。该 Capsule 的高度设置为 4,并且应用了 `matchedGeometryEffect` 修饰符,用于创建视图间的共享动画效果。
  • 5. `matchedGeometryEffect(id:"Tab", in: name)`:这个修饰符用于创建一个共享的几何效果,以便在视图间进行动画过渡时使用。它接受两个参数:`id` 和 `in`。`id` 用于唯一标识几何效果,`in` 表示几何效果应用的范围。在这里,我们使用 `id` 为 "Tab",而 `in` 为 `name`,表示几何效果在 `name` 的范围内共享。这样,当 `index` 改变时,被选中的标签会以动画的方式从之前的位置移动到新的位置,从而创建一种流畅的过渡效果。
  • 通过以上代码,您可以实现一个在用户切换选项卡时具有动画效果的标签栏。
  • Image

  • 这段代码创建了一个图像视图,用于显示名为 "profile" 的图像文件。让我解释一下代码的结构和功能:
  • - `Image("profile")`:这是一个图像视图,用于显示名为 "profile" 的图像文件。在 SwiftUI 中,可以直接使用图像文件的名称来创建图像视图。
  • - `.resizable()`:这个修饰符允许图像调整大小,以便根据所提供的框架大小自适应。
  • - `.aspectRatio(contentMode: .fill)`:这个修饰符设置了图像的纵横比,并指定了内容模式为 `.fill`,这意味着图像会被拉伸或挤压以填充整个框架,不保持原始比例。
  • - `.frame(width: 85, height: 85)`:这个修饰符设置了图像视图的大小,使其具有宽度和高度均为 85 点的框架。
  • - `.clipShape(Circle())`:这个修饰符将图像裁剪为圆形,使得图像的外部部分被剪裁掉,只保留圆形范围内的部分。
  • 通过以上代码,您创建了一个图像视图,将名为 "profile" 的图像文件显示为圆形的头像,且头像大小为 85x85 点。
  • VStack

  • 这段代码创建了一个垂直方向的堆栈 (VStack),其中包含了一些子视图,并且设置了子视图的对齐方式和间距。让我解释一下代码的结构和功能:
  • - `VStack`:这是一个 SwiftUI 中的布局视图,用于垂直排列其中的子视图。
  • - `alignment: .leading`:通过设置 `alignment` 参数为 `.leading`,指定了堆栈中子视图的对齐方式为左对齐。这意味着堆栈中的子视图将在左侧对齐,而不是默认的居中对齐。
  • - `spacing: 15`:通过设置 `spacing` 参数为 `15`,指定了堆栈中相邻子视图之间的间距为 `15` 点。这意味着相邻的子视图之间会有 `15` 点的间距,用于调整它们在堆栈中的布局位置。
  • 通过以上代码,您创建了一个垂直堆栈,其中的子视图会左对齐,并且相邻子视图之间有 `15` 点的间距。这种布局可以用于创建垂直排列的用户界面元素,比如表单、列表等。
  • renderingMode(.template)`

  • 在 SwiftUI 中,`.renderingMode(.template)` 是用于设置图像的渲染模式的一种方式。渲染模式定义了图像在视图中的显示方式。
  • 将渲染模式设置为 `.template` 时,图像将以模板方式渲染。在这种模式下,图像的颜色将根据环境中的前景色自动进行调整。这意味着,无论您将图像放置在什么背景下,它都会自动适应并显示为前景色。
  • 在这个示例中,创建了一个心形图标,并将其渲染模式设置为 `.template`。然后,通过设置 `.foregroundColor(.red)` 来指定前景色为红色。由于设置了渲染模式为 `.template`,因此即使将图标放置在不同的背景下,它也会自动调整颜色以匹配前景色(红色)。
  • 这种渲染模式在需要根据环境动态调整图像颜色的情况下非常有用,例如在按钮、图标等 UI 元素中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值