【问题标题】:How to select an item in ScrollView with SwiftUI?如何使用 SwiftUI 在 ScrollView 中选择一个项目?
【发布时间】:2020-11-27 12:28:53
【问题描述】:

我想要完成的是有一个项目循环,我可以在其中点击一个,一旦点击它就会以编程方式变大

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

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 不会自行重新加载

【问题讨论】:

    标签: foreach swiftui scrollview


    【解决方案1】:

    只需删除 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 测试

    【讨论】:

    • 哦,是的,它可以工作,但只能在模拟器中而不是在预览中,我应该想象,
    • 这并不是真正选择元素。这是一种视觉技巧,给人以选中元素的印象。
    • @Duck "selected" 没有普遍意义;它意味着应用程序的设计者决定它意味着什么。使元素看起来被选中是一个完全正常的、非黑客方面的被选中
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 2020-10-19
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2021-03-17
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多