如何使用SwiftUI在ScrollView中选择项目? [英] How to select an item in ScrollView with SwiftUI?

查看:19
本文介绍了如何使用SwiftUI在ScrollView中选择项目?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图实现的是有一个项目循环,我可以在其中点击一个项目,一旦点击,它就会以编程方式变得更大

以下是我的代码和到目前为止的结果:

struct ContentView: View {
    
    @State var emojisArray = ["📚", "🎹", "🎯", "💻"]
    @State var selectedIndex = 0
    
    var body: some View {
        VStack {
            ScrollView(.horizontal) {
                
                HStack {
                    
                    ForEach(0..<emojisArray.count) { item in
                        
                        
                        emojiView(emoji: self.emojisArray[item],
                                  isSelected: item == self.selectedIndex ? true : false)
                            
                            .onTapGesture {
                                print (item)
                                self.selectedIndex = item
                                
                                
                        }
                        
                    }
                    
                }
                
                
            }
        .onAppear()
            .frame(height:160)
            
            VStack{
                Text("selcted item:")
                Text("(self.emojisArray[self.selectedIndex])")
            }
            
        }
        
        
    }
}

emojiView在哪里:

struct emojiView: View {
    
    var emoji : String
    @State var isSelected : Bool
    
    var body: some View {
        Text(emoji)
            .font(isSelected ? .system(size: 120) : .system(size: 45))
    }
}

我想问题在于ScrollView不会自动重新加载

推荐答案

只需删除emojiView中的@State

struct emojiView: View {

    var emoji : String
    var isSelected : Bool      // << here !!

    var body: some View {
        Text(emoji)
            .font(isSelected ? .system(size: 120) : .system(size: 45))
    }
}

使用Xcode 12/IOS 14测试

这篇关于如何使用SwiftUI在ScrollView中选择项目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆