ios - SwiftUI:仅当 ScrollView 超过屏幕高度时才可滚动

标签 ios swift swiftui scrollview

目前我有一个看起来像这样的 View 。

struct StatsView: View {
    var body: some View {
        ScrollView {
            Text("Test1")
            Text("Test2")
            Text("Test3")
        }
    }
}

这会在 ScrollView 中呈现一个包含 3 个文本的 View ,每当我在屏幕中拖动这些文本中的任何一个时, View 都会移动导致其可滚动,即使这 3 个文本适合屏幕并且还有剩余空间。我想要实现的是仅在其内容超过屏幕高度大小时才使 ScrollView 可滚动,如果不是,我希望 View 是静态的并且不要移动。我尝试使用 GeometryReader 并将 ScrollView 框架设置为屏幕宽度和高度,内容也相同,但我仍然有相同的行为,我也尝试过设置 minHeight、maxHeight 没有任何运气。

我怎样才能做到这一点?

最佳答案

出于某种原因,我无法完成上述任何一项工作,但它确实激励我找到了适合我的解决方案。它不像其他的那样灵活,但可以很容易地适应支持两个滚动轴。

import SwiftUI

struct OverflowContentViewModifier: ViewModifier {
    @State private var contentOverflow: Bool = false
    
    func body(content: Content) -> some View {
        GeometryReader { geometry in
            content
            .background(
                GeometryReader { contentGeometry in
                    Color.clear.onAppear {
                        contentOverflow = contentGeometry.size.height > geometry.size.height
                    }
                }
            )
            .wrappedInScrollView(when: contentOverflow)
        }
    }
}

extension View {
    @ViewBuilder
    func wrappedInScrollView(when condition: Bool) -> some View {
        if condition {
            ScrollView {
                self
            }
        } else {
            self
        }
    }
}

extension View {
    func scrollOnOverflow() -> some View {
        modifier(OverflowContentViewModifier())
    }
}
用法
VStack {
   // Your content
}
.scrollOnOverflow()

关于ios - SwiftUI:仅当 ScrollView 超过屏幕高度时才可滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62463142/

相关文章:

iOS 图表,Swift 2.1.1 Xcode 7.2 似乎不起作用,

swift - 如何使第二个表的 View 列表依赖于在前一个 TableView 中选择的行?

ios - UIView 作为@EnvironmentObject 的订阅者

ios - 获取登录用户的 Facebook 好友列表

ios - React Native 中的 Native Base Deck Swiper

iOS apple-app-site-association - 它是否需要离开我服务器的根目录?

ios - Swift:对单元使用自定义配件类型会卡住 UI 和 99% 的 CPU 使用率

swift - 如何在 ForEach Swiftui 中的结构列表中使用枚举?

ios - 在 SwiftUI 中将计时器传递给 subview

android - 同一 Facebook 应用上的多个原生移动应用