SwiftUI ScrollView、GeometryReader 和 Button = 奇怪的行为

Posted

技术标签:

【中文标题】SwiftUI ScrollView、GeometryReader 和 Button = 奇怪的行为【英文标题】:SwiftUI ScrollView, GeometryReader and Button = Weird Behaviour 【发布时间】:2020-05-01 20:39:10 【问题描述】:

在过去的 2 个小时里,我一直在尝试让按钮的 ScrollView 工作,更具体地说,使用 GeometryReader 来确定其大小的按钮的 ScrollView。此外,所有这些都放置在 NavigationView 中。

有一些奇怪的行为,比如按钮没有执行其操作,没有注册点击,当放置在 VStack 中的 HStack 中以获得类似网格的结构时,我只能点击具有预期效果的第一行按钮,另一个按钮都没有反应。如何正确构建所有这些视图?

【问题讨论】:

【参考方案1】:

下面的代码对我有用:

    var body : some View 
        NavigationView 
            VStack
                GeometryReader geometry in
                    ScrollView 
                      // This is just how i'm setting up my buttons
                        VStack 
                            ForEach(0 ..< 2, id: \.self)  row in
                                HStack 
                                    ForEach(0 ..< 2, id: \.self)  column in
                                        TestButton()
                                    
                                
                            
                        
                    
                
            .navigationBarTitle("")
            .navigationBarHidden(true)
        
        .navigationViewStyle(StackNavigationViewStyle())
        .edgesIgnoringSafeArea(.all)
        .navigationBarTitle("")
        .navigationBarHidden(true)
    

请注意,ScrollView 必须嵌套在 GeometryReader 中,否则会出现奇怪的行为(在我的情况下,我只能点击具有预期效果的第一行按钮)。希望这对某人有帮助!

【讨论】:

您的代码与评论不符。你能修复代码或评论吗?您的 GeometryReader 没有嵌套在上述代码中的 ScrollView 中。 别担心,感谢更新。我也注意到按钮和滚动视图的类似奇怪行为。

以上是关于SwiftUI ScrollView、GeometryReader 和 Button = 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 淡出 ScrollView

SwiftUI:调整 ScrollView 的边界

SwiftUI:为啥这个 ScrollView 的内容错位了?

SwiftUI:在 ScrollView 中居中内容

SwiftUI - 如何获取 ScrollView 内容的大小(高度)

SwiftUI:奇怪的行为 ScrollView