ios - swiftui 三视图栈布局,中间栈占用空间
问题描述
我正在尝试使用 SwiftUI 来构建带有VStack
. 我希望页眉和页脚各占屏幕高度的 10%,并扩展内容以填充其余部分。这种模式可能对页眉/内容/页脚以外的东西有用,所以如果已经有实现这种模式的东西(中间视图扩展,或类似的东西),那就太好了......
对于经验丰富的快速开发人员来说,这可能非常简单,但我似乎无法在任何地方找到它的示例。
任何建议/指针/代码将不胜感激!
我现有的超级简单代码,删除了我的所有实验:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack() {
Header()
Content()
Footer()
}
.frame(minWidth: 0,
maxWidth: .infinity,
minHeight: 0,
maxHeight: .infinity,
alignment: Alignment.topLeading)
.border(Color.red)
}
}
struct Header: View {
var body: some View {
HStack() {
Text("Header")
}
.padding()
.border(Color.blue)
}
}
struct Content: View {
var body: some View {
HStack() {
Text("Content")
}
.padding()
.border(Color.black)
}
}
struct Footer: View {
var body: some View {
HStack() {
Text("Footer")
}
.padding()
.border(Color.green)
}
}
解决方案
我认为您可以GeometryReader
在您的情况下使用:
struct HeaderContentFooter: View {
var body: some View {
GeometryReader { geometry in
VStack(spacing: 0) {
Rectangle() // header
.foregroundColor(.red)
.frame(height: geometry.size.height / 10)
Rectangle() // content, which fill up everything with VStack
Rectangle() // footer
.foregroundColor(.red)
.frame(height: geometry.size.height / 10)
}
}
.edgesIgnoringSafeArea(.all)
}
}
推荐阅读
- c# - C# Salesforce MetaData API 插入 PickList 值
- python - 更改为包含 MDDataTable --kivy 的屏幕后,MDList 的按钮卡住
- xml - 从节点中删除命名空间,然后使用 xslt 将该节点复制到新节点中
- java - 如何在带有验证注释的 bean 属性的测试用例中引发 ConstraintValidationException?
- android - 如果字符之间没有出现Android字符串资源变量
- python-3.x - python txt文件到多个txt文件
- python - 如何检查用户输入的姓名?
- c# - System.UnauthorizedAccessException Message=对路径“/C:\Users\user\Desktop\C\dok.txt”的访问被拒绝
- javascript - 在嵌入式谷歌表单上单击提交时显示弹出/对话框
- apache - .htaccess 如何在网站上显示特定 URL 的 503