alignment - SwiftUI 中的布局与水平和垂直对齐
问题描述
我正在尝试完成此布局
如果我尝试包装在 VStack 中的 HStack,我会得到:
如果我尝试包装在 HStack 中的 VStack,我会得到:
有没有办法将文本与文本字段进行基线对齐,并从最长的标签到对齐的文本字段的开头获得标准间距?
解决方案
在这里不是专家,但我设法通过以下方式实现所需的布局:(1)选择 2 VStacks
-in-a-HStack
替代方案,(2)框架外部标签,(3)通过分配将它们从默认的垂直扩展约束中释放出来他们maxHeight = .infinity
和(4)固定的高度HStack
struct ContentView: View {
@State var text = ""
let labels = ["Username", "Email", "Password"]
var body: some View {
HStack {
VStack(alignment: .leading) {
ForEach(labels, id: \.self) { label in
Text(label)
.frame(maxHeight: .infinity)
.padding(.bottom, 4)
}
}
VStack {
ForEach(labels, id: \.self) { label in
TextField(label, text: self.$text)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
.padding(.leading)
}
.padding(.horizontal)
.fixedSize(horizontal: false, vertical: true)
}
}
这是生成的预览:
为了解决外部和内部标签的未对齐基线(与此特定布局无关的附带问题 - 例如参见此讨论),我手动添加了填充
感谢这个网站在理解 SwiftUI 布局技巧的道路上启发了我
推荐阅读
- apache-kafka - Kafka事务超时与事务ID到期
- java - 如何在 Java 应用程序中创建 oracle 连接,部署在 JBoss 服务器中?(WrappedConnectionJDK8 不能强制转换为 oracle.jdbc.OracleConnection)
- c - 为什么 strncpy() 不遵守 temp2 中为 10 的给定 size_t n?
- ios - iPad 中的键盘和移动模式
- powershell - 尝试编写脚本将用户添加到组
- python - 在具有部分函数python的列表上应用reduce
- python - 如何在 linux 上安装特定版本的 PyQt5
- modelica - 有没有用 Modelica 编写的开源热交换器库?
- ckeditor - ckeditor - 在使用 ckEditor 管理的富文本字段中,通过鼠标右键单击浏览器复制后粘贴的双图像(在 SFDC 中)
- rust - 是否可以在宏中迭代外部结构的成员?