struct HStack (英文)
struct VStack (英文)
struct ZStack (英文)
单独的 HStack
(英文)、VStack
(英文) 和 ZStack
(英文) 均属于简单视图。HStack
(英文) 可以将视图置于水平线上,VStack
(英文) 可以将视图置于垂直线上,而 ZStack
(英文) 则可以将视图相互叠放。
当你使用默认参数初始化它们时,stack 视图会将其内容居中对齐,并在每个所含视图之间插入少量间隔。但是,当你使用视图修饰符 Spacer
(英文) 和 Divider
(英文) 视图合并和自定 stack 时,你可以创建高度灵活的复杂布局。
当你开始将设计转换为代码时,在布局方面,请考虑可以如何使用各种类型的 stack 视图创建布局。将复杂设计细分为你可以通过 stack 视图构建的更小、更简单的部分。
例如,你可以使用三种 stack 视图构建以下个人资料视图:
ZStack
(英文) 包含一个显示个人资料图片的 Image
(英文) 视图,后者顶部叠加了一个半透明 HStack
(英文)。HStack
(英文) 包含一个 VStack
(英文),后者内部有一对 Text
(英文) 视图,Spacer
(英文) 视图将 VStack
(英文) 推向前缘侧。
若要创建这个 stack 视图,请使用以下代码:
struct ProfileView: View {
var body: some View {
ZStack(alignment: .bottom) {
Image("ProfilePicture")
.resizable()
.aspectRatio(contentMode: .fit)
HStack {
VStack(alignment: .leading) {
Text("Rachael Chiseck")
.font(.headline)
Text("Chief Executive Officer")
.font(.subheadline)
}
Spacer()
}
.padding()
.foregroundColor(.primary)
.background(Color.primary
.colorInvert()
.opacity(0.75))
}
}
}
通过组合使用 alignment
属性、Spacer
(英文) 和 Divider
(英文) 视图,对齐 stack 视图中包含的任意视图。
在前面的示例布局中,包含两个 Text
(英文) 视图的 VStack
(英文) 使用 leading
(英文) 对齐:
alignment
属性不会调整 VStack
(英文) 相对于其父容器的布局,而是调整 VStack
(英文) 内部视图的布局。
VStack
(英文) 的 alignment
属性仅会应用于使用 Horizontal
(英文) 对所含控件的水平对齐。同样,HStack
(英文) 的 alignment
属性仅控制使用 Vertical
(英文) 的垂直对齐。最后,你可以使用 Alignment
(英文) 沿两个轴对齐 ZStack
(英文) 中的视图。
Spacer
(英文) 视图用于沿 HStack
(英文) 或 VStack
(英文) 的主轴对齐视图。Spacer 会进行扩展以填充所有可用空间,并将内容从其他视图或 stack 的边缘推开。
Divider
(英文) 视图还会在 stack 的子视图之间添加空间,但仅会插入足够沿 stack 的副轴绘制一条直线的空间。它们不会进行扩展来填充可用的空间。
尽可能定义结构和层次结构,而不是显式确定视图框架的位置。不要为视图使用显式高度和宽度,而应让它们进行扩展以填充可用空间。你构建的自适应布局更容易适应不同的设备大小和平台。
通过以显式方式操控 Text
(英文) 视图框架,可以使用两个而不是三个 stack 视图来创建这篇文章的示例布局。尽管输出看起来可能相同,但用来实施的代码更加脆弱,并且还可能无法在不同大小类别的设备之间进行缩放。
你可能需要使用 frame(width:
(英文) 或 position(x:
(英文) 等视图修饰符来对使用显式调整的布局进行调整,但仅当你无法以灵活的自适应方式获得所需布局才应考虑此方法。有关对视图布局进行精细调整的更多信息,请参阅“对视图的位置进行精细调整 (英文)”。
在某些情况下,可能需要使用 overlay(_:
(英文) 和 background(_:
(英文) 视图修饰符而不是 ZStack
(英文) 来为你的布局添加深度。Background 视图修饰符将另一个视图置于你正在修饰的视图之后,overlay 则是在其顶部放置一个视图。
根据你想要如何确定最终布局的大小,在基于 stack 的方法和视图修饰符方法之间进行选择。如果你的布局有一个定义布局大小的主导视图,请在该视图上使用 overlay(_:
(英文) 或 background(_:
(英文) 视图修饰符。如果你想通过汇总所有所含视图得出最终视图大小,请使用 ZStack
(英文)。
例如,以下代码会在 Image
(英文) 视图的顶部叠加一个 Profile
视图:
struct ProfileViewWithOverlay: View {
var body: some View {
VStack {
Image("ProfilePicture")
.resizable()
.aspectRatio(contentMode: .fit)
.overlay(ProfileDetail(), alignment: .bottom)
}
}
}
struct ProfileDetail: View {
var body: some View {
HStack {
VStack(alignment: .leading) {
Text("Rachael Chiseck")
.font(.headline)
Text("Chief Executive Officer")
.font(.subheadline)
}
Spacer()
}
.padding()
.foregroundColor(.primary)
.background(Color.primary
.colorInvert()
.opacity(0.75))
}
}
struct HStack (英文)
struct VStack (英文)
struct ZStack (英文)
肚脐下方疼是什么原因 | 毛主席什么时候去世 | 七月一号是什么节 | 复方阿胶浆适合什么样的人喝 | ozark是什么牌子 |
血液粘稠是什么原因 | 低压高吃什么药最有效 | 脚拇指外翻是什么原因造成的 | 一只眼皮肿是什么原因 | 你想什么 |
夏至什么时候 | 腺样体是什么意思 | 为什么叫新四军 | 霉菌是什么原因感染的 | 大专什么专业好就业 |
水有什么作用 | 11月14号是什么星座 | 镶牙和种牙有什么区别 | 孕妇血糖高有什么症状 | 腺病毒吃什么药 |
胆囊炎有什么症状hcv9jop6ns1r.cn | 又吐又拉是什么原因hcv8jop8ns3r.cn | 睡眠不好挂什么科hcv8jop0ns4r.cn | 菠菜是什么季节的菜hcv8jop8ns1r.cn | 儿童哮喘挂什么科hcv9jop0ns7r.cn |
身上起红点是什么病hcv8jop1ns1r.cn | 流鼻血什么原因hcv8jop6ns4r.cn | 尿结石不能吃什么qingzhougame.com | 三亚在海南的什么位置adwl56.com | 以梦为马是什么意思hcv7jop7ns4r.cn |
俄罗斯被称为什么hcv9jop5ns8r.cn | 春秋大梦是什么意思hcv8jop4ns5r.cn | 一什么嘴巴hcv8jop5ns1r.cn | 小腿前面的骨头叫什么hcv7jop6ns5r.cn | 山西的简称是什么zhongyiyatai.com |
心电图窦性心律不齐是什么意思xinjiangjialails.com | 梦见买鞋子是什么意思hcv8jop9ns1r.cn | 铮字五行属什么hcv9jop6ns4r.cn | 骨折有什么症状hcv7jop6ns1r.cn | 水便分离的原因是什么hcv9jop7ns4r.cn |