ios - 在 SwiftUI 中,如何去除 Form 对象后多余的空白?
问题描述
我正在尝试创建一个简单的页面,该页面具有从几个不同选项中进行选择的选项,然后在选择选项后显示一个文本字段和按钮。逻辑很好用,但不幸的是,在 Form 对象和其余 UI 元素之间有大量空白 - 有没有办法改变这种情况?
这是代码:
VStack {
Text("What would you like help with?")
.font(.largeTitle)
.fontWeight(.bold)
.multilineTextAlignment(.center)
Form {
Picker("Color", selection: $selectedIndex) {
ForEach(0 ..< arrayOfNames.count) {
Text(self.arrayOfNames[$0])
}
}
}
TextField("Enter your question", text: $question)
.opacity(selectedIndex > 0 ? 1 : 0)
.textFieldStyle(RoundedBorderTextFieldStyle())
Button(action: {}) {
Text("Ask")
}.opacity(selectedIndex > 0 ? 1 : 0)
这是显示问题的图像:
解决方案
这个答案与我在这里的答案非常相似。
我的答案使用SwiftUI-Introspect,因此您可以获得内容高度而不必猜测正确的高度。您可以确定这将适应各种因素,如屏幕方向、字体大小等。
Form
高度非常贪婪 - 你需要以某种方式限制它。我正在做的是获取Form
内容的真实高度,然后使用它来限制Form
高度。
解决方案
- 创建一个
@State
变量以包含内容高度:
@State private var contentHeight: CGFloat?
- 添加代码以限制
Form
高度:
Form {
/* ... */
}
.introspectTableView { tableView in
contentHeight = tableView.contentSize.height
}
.frame(height: contentHeight)
就是这样!
结果:
推荐阅读
- joomla3.0 - 在 Joomla 前端编辑文章时呈现特定的自定义字段
- angular - 为什么 dataSource 没有显示在我的 mat-table 中?
- python - 序数回归算法似乎将预测转移了一类
- angular - Firebase 身份验证 RxJs 的嵌套排气映射和连接映射
- css - Gatsby 构建失败 google-fonts
- javascript - 用于组合两个 javascript 脚本并删除它们的共同点的工具
- javascript - vue.js 中的登录表单返回未定义
- django - Django 和 PostgreSQL - 如何存储时间范围?
- python - 关于返回父实例(?)
- rest - 将 4 种类型的文件合并为一个 json 文件,以内存优化方式根据一项对记录进行分组