ios - 在 SwiftUI 中使 VStack 填充屏幕的宽度
问题描述
鉴于此代码:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Title")
.font(.title)
Text("Content")
.lineLimit(nil)
.font(.body)
Spacer()
}
.background(Color.red)
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
结果是这个界面:
VStack
即使标签/文本组件不需要全宽,我如何才能填充屏幕的宽度?
我发现的一个技巧是在结构中插入一个空 HStack
,如下所示:
VStack(alignment: .leading) {
HStack {
Spacer()
}
Text("Title")
.font(.title)
Text("Content")
.lineLimit(nil)
.font(.body)
Spacer()
}
这会产生所需的设计:
有没有更好的办法?
解决方案
尝试使用.frame
带有以下选项的修饰符:
.frame(
minWidth: 0,
maxWidth: .infinity,
minHeight: 0,
maxHeight: .infinity,
alignment: .topLeading
)
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Hello World")
.font(.title)
Text("Another")
.font(.body)
Spacer()
}
.frame(
minWidth: 0,
maxWidth: .infinity,
minHeight: 0,
maxHeight: .infinity,
alignment: .topLeading
)
.background(Color.red)
}
}
这被描述为一个灵活的框架(请参阅文档),它将拉伸以填满整个屏幕,并且当它有额外的空间时,它会将其内容居中放置在其中。
推荐阅读
- python - shutil.copy 是否识别波浪号 (~) 字符,是否有替代 shutil.copy 识别的波浪号的替代方法?
- go - Go 是否提供与 Threadpool 等效的功能
- google-maps - 指定 API 以默认到离源最近的目的地
- django - 颤动的手动facebook登录过程
- java - 不使用“克隆”复制堆栈或队列
- ios - 从 cocoapods 过渡到 Swift 包管理器
- reactjs - 如何将 JS 库和脚本导入 React 项目?
- docker - Docker挂起“激活”
- jsf - 自动填充几个 h:inputText on h:selectOneMenu 更改
- sql - 找出只管理一名员工的经理