给定此代码:
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
Run Code Online (Sandbox Code Playgroud)
导致这种交互:
VStack即使标签/文本组件不需要整个宽度,如何填充屏幕的宽度?
我发现的一个技巧是在结构中插入一个空 HStack,如下所示:
VStack(alignment: .leading) {
HStack {
Spacer()
}
Text("Title")
.font(.title)
Text("Content")
.lineLimit(nil)
.font(.body)
Spacer()
}
Run Code Online (Sandbox Code Playgroud)
产生所需的设计:
有没有更好的办法?
我正在尝试重新创建Twitter iOS应用的一部分以学习SwiftUI,并且想知道如何动态地将一个视图的宽度更改为另一视图的宽度。就我而言,使下划线与“文本”视图的宽度相同。
我已附上屏幕截图,以尝试更好地解释我的意思。任何帮助将不胜感激,谢谢!
这也是我到目前为止的代码:
import SwiftUI
struct GridViewHeader : View {
@State var leftPadding: Length = 0.0
@State var underLineWidth: Length = 100
var body: some View {
return VStack {
HStack {
Text("Tweets")
.tapAction {
self.leftPadding = 0
}
Spacer()
Text("Tweets & Replies")
.tapAction {
self.leftPadding = 100
}
Spacer()
Text("Media")
.tapAction {
self.leftPadding = 200
}
Spacer()
Text("Likes")
}
.frame(height: 50)
.padding(.horizontal, 10)
HStack {
Rectangle()
.frame(width: self.underLineWidth, height: 2, alignment: .bottom)
.padding(.leading, leftPadding)
.animation(.basic())
Spacer()
}
} …Run Code Online (Sandbox Code Playgroud) 这是我上一个问题的扩展(在 SwiftUI 中使用获取视图的宽度)
我需要实现一个布局,其中每行的项目数是根据它们的组合宽度动态确定的(基本上,将项目排成一行,直到它们不再适合为止)。

有人告诉我,使用 GeometryReader 是一种用声明性语言做某事的hacky 方式,这显然是正确的。
我也被定向到这个类似 CollectionView 的组件https://github.com/Q-Mobile/QGrid但解决方案是静态的,因为在呈现任何组件之前,行数和每行单元格的数量是一次性确定的。
我不知道如何解决这个问题,所以任何建议对我来说都非常有价值!
??????
我想将“图像”帧的大小调整为一个正方形,该正方形采用的屏幕宽度相同,因此高度的值(屏幕宽度)相同。
以下代码无效,因为它为图像提供了相同的视图高度。
var body: some View {
Image("someImage")
.resizable()
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
.clipped()
}
Run Code Online (Sandbox Code Playgroud)