現在、私はこのような見方をしています。
struct StatsView: View {
var body: some View {
ScrollView {
Text("Test1")
Text("Test2")
Text("Test3")
}
}
}
これにより、スクロールビュー内に3つのテキストを含むビューがレンダリングされます。画面内でこれらのテキストのいずれかをドラッグすると、これらの3つのテキストが画面に収まり、残りのスペースがある場合でも、ビューが移動してスクロール可能になります。私が達成したいのは、コンテンツが画面の高さのサイズを超えている場合にのみScrollViewをスクロール可能にすることです。そうでない場合は、ビューを静的にし、移動しないようにします。GeometryReaderを使用して、スクロールビューフレームを画面の幅と高さに設定してみました。これもコンテンツで同じですが、引き続き同じ動作をします。また、運がなくてもminHeight、maxHeightを設定してみました。
どうすればこれを達成できますか?
これが解決策です(Xcode 11.4 / iOS 13.4でテスト済み)
struct StatsView: View {
@State private var fitInScreen = false
var body: some View {
GeometryReader { gp in
ScrollView {
VStack { // container to calculate total height
Text("Test1")
Text("Test2")
Text("Test3")
//ForEach(0..<50) { _ in Text("Test") } // uncomment for test
}
.background(GeometryReader {
// calculate height by consumed background and store in
// view preference
Color.clear.preference(key: ViewHeightKey.self,
value: $0.frame(in: .local).size.height) })
}
.onPreferenceChange(ViewHeightKey.self) {
self.fitInScreen = $0 < gp.size.height // << here !!
}
.disabled(self.fitInScreen)
}
}
}
注: ViewHeightKey
設定キーはこの私のソリューションから取得されます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加