我正在使用SwiftUI開發watchOS應用程式。這是我第一次使用 SwiftUI 并開發 watchOS 應用程式。
我想創建一個ScrollView包含 2 個視圖的視圖,每個視圖都應該與整個螢屏具有相同的高度。
import SwiftUI
struct ScrollViewContainer_swift: View {
var body: some View {
ScrollView {
DetailView()
DetailView()
}
}
}
struct ScrollViewContainer_swift_Previews: PreviewProvider {
static var previews: some View {
ScrollViewContainer_swift()
}
}
import SwiftUI
struct DetailView: View {
var body: some View {
VStack {
Spacer()
Text("This should take up the height of the entire screen.")
Spacer()
}
.ignoresSafeArea(.container, edges: .all)
.background(Color.blue)
}
}
struct DetailView_Previews: PreviewProvider {
static var previews: some View {
DetailView()
}
}
使用ignoresSafeArea,我可以制作一個單曲DetailView來占據整個高度。結果DetailView_Previews如下所示:

但是,如果我將其放入s 中ScrollView,則DetailViews 似乎縮小到最小高度:

我嘗試了以下方法,但這些似乎都不起作用。
DetailView().frame(maxHeight: .infinity)DetailView().ignoresSafeArea()ScrollView().ignoresSafeArea()
像DetailView().frame(height: 170)我想要實作的那樣強制視圖的高度,但它顯然不能適應各種螢屏尺寸。
還有什么我可以嘗試的嗎?
謝謝你。
uj5u.com熱心網友回復:
在您當前的代碼中,ScrollView將占用一個螢屏中的所有可用空間。然后,它DetailView只會占用它需要的空間。即使使用Spacers,它也不會垂直擴展,因為 sScrollView沒有對其施加大小限制。
為了使DetailViews 成為螢屏的大小,您可以使用 aGeometryReader然后將高度傳遞給子視圖:
struct ContentView : View {
var body: some View {
GeometryReader { proxy in
ScrollView {
VStack(spacing: 0) {
DetailView().frame(height: proxy.size.height)
DetailView().frame(height: proxy.size.height)
}
}
}.ignoresSafeArea()
}
}
struct DetailView: View {
var body: some View {
VStack {
Spacer()
Text("This should take up the height of the entire screen.")
Spacer()
}
//.frame(maxWidth: .infinity) //add this if you want the view to extend to the horizontal edges
.background(Color.blue)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362377.html
上一篇:無法訪問小部件變數
