我创建列表并在其中添加 VStack 并在 VStack 中添加了一些视图。当我运行该项目时,我观察到 List 的滚动超出了安全区域。仅供参考,如果我删除 Frame 属性仍然是相同的结果。模拟器gif
struct ContentView : View {
var body: some View {
List(0..<5) { item in
HStack(alignment: VerticalAlignment.top, spacing: 5) {
Image(systemName: "photo")
VStack(alignment: HorizontalAlignment.leading, spacing: 10) {
Text("USA")
.font(.headline)
Text("This is an extremely long string that will never fit even the widest of Phones Excerpt From: Paul Hudson. “SwiftUI by Example”. Apple Books. ")
.lineLimit(nil)
.font(.subheadline)
}
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.background(Color.red)
.onAppear() {
print("on …Run Code Online (Sandbox Code Playgroud) 我的目标是将两个选择器水平并排放置,每个选择器占用屏幕的一半宽度。想象一下UIPickerView,它适合屏幕的宽度,并且具有两个宽度相等的组件-这就是我试图在SwiftUI中重新创建的组件。
由于SwiftUI中的选择器当前不允许使用多个组件,因此对我来说,显而易见的替代方案是将两个选择器放置在内HStack。
这是来自测试项目的一些示例代码:
struct ContentView: View {
@State var selection1: Int = 0
@State var selection2: Int = 0
@State var integers: [Int] = [0, 1, 2, 3, 4, 5]
var body: some View {
HStack {
Picker(selection: self.$selection1, label: Text("Numbers")) {
ForEach(self.integers) { integer in
Text("\(integer)")
}
}
Picker(selection: self.$selection2, label: Text("Numbers")) {
ForEach(self.integers) { integer in
Text("\(integer)")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是画布:
选择器不会调整为屏幕宽度的一半,就像我期望的那样。它们保留其大小,而是拉伸内容视图的宽度,从而扭曲了流程中其他UI元素的宽度(正如我在其他项目中尝试这样做时所发现的那样)。
我知道我可以用它UIViewRepresentable来获得想要的效果,但是鉴于我要使用它的复杂性,SwiftUI会更容易使用。
是将两个选择器放置在内HStack并不能正确调整它们的大小,还是SwiftUI中的选择器只是具有无法更改的固定宽度?
使用GeometryReader …