如何使用 SwiftUI 在 ScrollView 中选择一个项目?

2024-04-06

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

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

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


只需删除@State in emojiView

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 进行测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SwiftUI 在 ScrollView 中选择一个项目? 的相关文章

随机推荐

  • 三个js如何手动添加三角形到BufferGeometry

    我一直在尝试找到使用 Three js 更改网格顶点的最快方法 我发现 如果我更改 mesh geometry attributes position array 的部分内容 然后设置 mesh geometry attributes po
  • scala 2.10中通过反射调用构造函数

    在 scala 2 10 M4 中调用类的构造函数的最佳实践是什么 回答我自己的问题 调用构造函数与调用方法不同 这是在 scala 2 10 中执行此操作的正确方法 import reflect runtime universe impo
  • 安卓。一起滚动 2 个列表视图

    好的 我想要实现的是一种与 Excel 中的冻结窗格具有相同效果的布局 也就是说 我想要一个与主 ListView 一起水平滚动的标题行 以及与主 ListView 一起垂直滚动的左侧 ListView 在另一个维度滚动时 标题行和左侧列表
  • Selenium:有没有可以与 Selenium Server/RC 集成的 JS (JavaScript) 代码覆盖工具

    Selenium 有没有可以与 Selenium Server RC 集成的 JS JavaScript 代码覆盖工具 Hi 我想通过我的 Selenium 测试套件完成 JS 代码覆盖率 是否有任何代码覆盖率工具可以与我现有的 selen
  • 带有 PHP 后端的日志套件?

    有人知道 PHP 应用程序的通用日志记录套件吗 我所说的 套件 是指一个轻量级的日志函数库以及成熟的后端来查看它们 后端必须是可配置的 并使用以下功能显示日志条目 按日期过滤 按事件过滤 警告 错误 自定义事件 按类别过滤 按用户过滤 按关
  • 安装 symfony-cmf-standard 时“执行缓存时发生错误:clear --no-warmup”

    我试图使用以下命令安装 symfony cmf standard composer phar create project symfony cmf standard edition symfony cmf standard stabilit
  • Int[].Contains 在 EF6 中不起作用

    我有一个奇怪的问题 基本上我有这个代码 var langauges from l in context languages where Model LanguageIDs Contains l LanguageID select l ToL
  • 显示 searchResults TableView 时隐藏 UITableView

    我有一个UITableView with a searchDisplayController实施的 我有 tableView backgroundColor UIColor clearColor and self searchDisplay
  • WordPress 网站迁移 - 图标丢失

    我最近按照以下步骤将本地站点迁移到临时服务器https codex wordpress org Moving WordPress https codex wordpress org Moving WordPress一切似乎都工作正常 最初
  • 延迟任务开始的正确方法

    我想安排一个任务在 x 毫秒内启动 并能够在它开始之前 或在任务开始时 取消它 第一次尝试是这样的 var cancelationTokenSource new CancellationTokenSource var token cance
  • 在日志中包含 Active Record 查询的作用

    Rails 现在支持多个数据库角色 默认情况下 https guides rubyonrails org active record multiple databases html using manual connection switc
  • powershell:如何从 [ref] 变量写入主机值

    我是 Powershell 新手 我正在尝试弄清楚如何从函数内打印 ref 变量的值 这是我的测试代码 function testref ref obj1 obj1 value obj1 value 5 write host the new
  • MongoDB 限制查找结果

    如何查询集合并限制返回的结果 假设我有一个包含 500M 文档的数据库 但我只想搜索并返回前 10 个匹配项 而不必搜索整个集合 出于性能原因 理想情况下 我可以在 O m n 时间内返回第 n 到 m 个结果 如果这可能或如何做到 有什么
  • ASP.Net Core 错误 JSON

    我正在玩一点 ASP NET Core 我正在创建一个基本的 webapi 我想在出现问题时显示 JSON 错误 打印屏幕在屏幕上显示我想要的内容 唯一的问题是发送时状态码为 200 catch NullReferenceException
  • 在 Visual Studio 调试器中查看命名空间全局变量?

    在 Visual Studio 2008 中调试非托管 C 项目时 我偶尔想查看全局变量的值 我们没有很多这些 但那些都在名为 全局 的名称空间中声明 例如 namespace global int foo bool bar 问题是 当代码
  • Dockerfile 中的 setfacl 没有效果

    我想在使用 setfacl 构建 docker 映像时为某些文件夹设置默认 acl 但它没有效果 默认 acl 不变 我的目标是在 opt 中创建的每个文件都必须对任何用户都具有 rwX 权限 因为该映像稍后将使用任意 uid 运行 并且需
  • 如何查看 conda 环境的创建日期?

    我创建了四个不同的版本conda virtual environments envs 用于图像处理任务 每个环境包括GDAL and OpenCV 以及相关库和依赖项的一些子集 我想将图像处理环境列表剔除到最近创建的一个 它将拥有我使用的最
  • 在整个项目上运行 CPPlint

    我想跑cplint py https github com google styleguide tree gh pages cpplint在我的整个项目中 不是通过单个文件来获取项目中所有 C C 文件的报告 如何在 macOS 和 Win
  • Java中列出目录和子目录中的所有文件

    列出 1000 多个目录和子目录中的文件名的最快方法是什么 编辑 我当前使用的代码是 import java io File public class DirectoryReader static int spc count 1 stati
  • 如何使用 SwiftUI 在 ScrollView 中选择一个项目?

    我想要完成的是有一个项目循环 我可以点击其中一个项目 一旦点击它就会以编程方式变得更大 这是我的代码和到目前为止的结果 struct ContentView View State var emojisArray State var sele