为什么ScollView内容大小无法针对此SwiftUI视图正确调整?

时间:2019-09-08 12:21:12

标签: swift swiftui

我正在使用Xcode beta7,以下是代码。 这是针对MacOs应用的。

这是我的代码:

import SwiftUI
struct ContentView: View {
    @State var isClicked = false
    var body: some View {
        ScrollView {
            Text("Click me").onTapGesture {
                self.isClicked.toggle()
            }.border(Color.red)
            V1(isClicked: $isClicked)
        }
    }
}

struct V1: View {
    @Binding var isClicked: Bool
    var body: some View {
        VStack(alignment: .leading) {
            if isClicked {
                ForEach(0...100, id: \.self) { index in
                    Text("value \(index)")
                }
            }
        }.padding()
    }
}

运行此代码,然后点击点击我按钮。 您将看到scrollView的内容大小未更新,并且保持压缩状态。

如果我尝试通过使用鼠标来调整屏幕大小来调整应用程序框架的大小,那么ScrollView的内容大小会立即捕捉到正确的大小。

我是否需要做一些事情来使ScrollView自动执行此操作(而不是我必须用鼠标手动增加应用程序的框架?

1 个答案:

答案 0 :(得分:0)

我最近在iOS watchOS上遇到了同样的问题。我解决的唯一方法是,将ScrollView的内容作为函子在具有ScrollView的结构中移动。如下所示。

struct ContentView: View {
    @State var isClicked = false
    var body: some View {
        ScrollView {
            Text("Click me").onTapGesture {
                self.isClicked.toggle()
            }.border(Color.red)
            otherView()
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }

    func otherView() -> some View{
        return VStack(alignment: .leading) {
            if isClicked {
                ForEach(0...100, id: \.self) { index in
                    Text("value \(index)")
                }
            }
        }.padding()
    }
}

它看起来像个虫子。