首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SwiftUI - List - UIViewRepresantable不会更新

SwiftUI是一种用于构建用户界面的现代化框架,它是苹果公司推出的一种声明式UI编程范式。SwiftUI的目标是简化和加速应用程序的开发过程,同时提供强大的功能和良好的用户体验。

在SwiftUI中,List是一个用于显示可滚动列表的视图容器。它可以根据提供的数据动态生成列表项,并支持各种自定义配置。List提供了一种简单的方式来显示和管理大量数据,同时还支持行选择、滑动删除和重新排序等功能。

UIViewRepresentable是一个协议,用于在SwiftUI中集成UIKit视图。通过实现UIViewRepresentable协议,我们可以将自定义的UIKit视图嵌入到SwiftUI的视图层次结构中,并与其他SwiftUI视图进行交互。

关于问题中提到的UIViewRepresentable不会更新的情况,可能是由于以下原因导致的:

  1. 数据源没有更新:如果List所使用的数据源没有发生变化,那么List中的列表项也不会更新。确保你的数据源在需要更新时进行了相应的更改。
  2. 更新机制不正确:当使用UIViewRepresentable嵌入自定义的UIKit视图时,需要确保正确实现updateUIView方法。这个方法会在数据源发生变化时被调用,用于更新UIKit视图的显示。
  3. 视图层次结构问题:如果UIViewRepresentable嵌入的UIKit视图的父视图层次结构发生了变化,可能会导致更新问题。确保你的视图层次结构正确地管理了视图的添加和移除。

针对这个问题,可以尝试以下解决方案:

  1. 检查数据源:确保你的数据源在需要更新时进行了相应的更改。
  2. 检查updateUIView方法:确保正确实现了updateUIView方法,并在其中更新UIKit视图的显示。
  3. 检查视图层次结构:确保你的视图层次结构正确地管理了视图的添加和移除。

如果以上解决方案都没有解决问题,可以尝试重新构建视图层次结构,或者查阅相关文档和社区讨论,寻找其他可能的解决方案。

腾讯云提供了一系列与云计算相关的产品和服务,可以根据具体需求选择合适的产品。具体推荐的产品和产品介绍链接地址可以在腾讯云官方网站上查找。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

优化在 SwiftUI List 中显示大数据集的响应效率

本文将通过一个优化列表视图的案例,展现在 SwiftUI 中查找问题、解决问题的思路,其中也会对 SwiftUI 视图的显式标识、@FetchRequest 的动态设置、List 的运作机制等内容有所涉及...列表视图的初始化和 body 求值 如果对 SwiftUI 的 NavigationView 有一定了解的话,应该知道 SwiftUI 会对 NavigationLink 的目标视图进行预实例化(但不会对...List 的效能 List 作为 SwiftUI 对 UITableView ( NSTableView )的封装,大多数情况下它的性能都比较令人满意。...标识( Identity )是 SwiftUI 在程序的多次更新中识别相同或不同元素的手段,是 SwiftUI 理解你 app 的关键。...我们将通过 SwiftUI-Introspect[7] 来实现在 List 中滚动到列表两端。

9K20

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了的先调整状态,后更新视图的操作。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误的结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新的滞后会导致不可接受的后果。...为什么状态更新滞后会导致严重错误由于 SwiftUI 的 不透明性,想要分析这些问题的成因并不容易。...因此,当我们首先更新状态,然后 SwiftUI 再响应该状态的变化(返回上层视图),即使此时对 AG 进行清理,仍将可以保证 AttributeGraph 的完整性,应用自然不会出现问题。...状态更新滞后不仅存在于本文介绍的两个案例中,当开发者遇到类似情况时,可以尝试采用状态更新优先的开发策略进行修改。总结今年 SwiftUI 已经进入了第五个年头。

583110

解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了的先调整状态,后更新视图的操作。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误的结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新的滞后会导致不可接受的后果。...为什么状态更新滞后会导致严重错误 由于 SwiftUI 的 不透明性,想要分析这些问题的成因并不容易。...因此,当我们首先更新状态,然后 SwiftUI 再响应该状态的变化(返回上层视图),即使此时对 AG 进行清理,仍将可以保证 AttributeGraph 的完整性,应用自然不会出现问题。...状态更新滞后不仅存在于本文介绍的两个案例中,当开发者遇到类似情况时,可以尝试采用状态更新优先的开发策略进行修改。 总结 今年 SwiftUI 已经进入了第五个年头。

26420

Ask Apple 2022 与 SwiftUI 有关的问答(下)

本文对本次活动中与 SwiftUI 有关的一些问答进行了整理,并添加了一点个人见解。本文为下篇。访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验以及最新的更新内容。...阅读 The SwiftUI Layout Protocol [11]了解如何创建自定义布局。创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...Swiftcord[12] 的代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 中显示大数据集的响应效率[13] 一文,了解苹果工程师推荐的方法。...但是,此转换仅在文本字段完成编辑时才会发生,并且不会阻止输入非数字字符。目前 SwiftUI 没有 API 可以限制用户在字段中输入的字符。...这种 “软弃用” 的 API 不会在代码自动补全中提供,而且通常处在文档中单独的一个部分。但编译器不会对现有的使用发出警告。

14.7K30

避免 SwiftUI 视图的重复计算

符合 DynamicProperty 协议的属性包装器 几乎每一个 SwiftUI 的使用者,在学习 SwiftUI 的第一天就会接触到例如 @State、@Binding 这些会引发视图更新的属性包装器...并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应的视图。 SwiftUI 上有一个困扰了不少人的问题:为什么无法在视图的构造函数中,更改 State 包装的变量值?...与符合 DynamicProperty 协议的属性包装器主动驱动视图更新的机制不同,SwiftUI更新视图时,会通过检查子视图的实例是否发生变化( 绝大多数都由构造参数值的变化导致 )来决定对子视图更新与否...创建新实例 将新实例与 SwiftUI 当前使用的实例进行比对 如实例发生变化,用新实例替换当前实例,对实例的 body 求值,并用新的视图值替换老的视图值 视图的存续期不会因为实体的更替有所改变 由于...这是因为,我们将 Student 类型作为参数传递给了子视图,SwiftUI 在比对实例的时候,并不会关心子视图中具体使用了 student 中的哪个属性,只要 student 发生了变化,那么就会重新计算

9.2K81

从前端视角看 SwiftUI

虽然不知道 SwiftUI 背后的实作,但背后应该也有类似 diff 机制的东西来达到响应式机制与最小更新的效果。 然而 SwiftUI 的状态管理与 React hooks 仍有差异。...由于 useToggle 是一个纯函数,因此内部的状态也不会互相影响。 然而在 SwiftUI 当中 @State 只能作用在 struct 的 private var 当中,不能进一步拆出。...既然采用了类似 redux 的手法,不知道 SwiftUI 是否会遇到与前端开发类似的问题,例如 immutability 确保更新可以被感知;透过优化 subscribe 机制确保 store 更新时只有对应的元件会更新...我还蛮想了解 SwiftUI 背后是怎么计算 diff 的,希望之后有类似的文章出现 @State 修饰符可用来定义元件内部状态,当状态改变时会更新并反映到画面中。...在 SwiftUI 当中可以这样写: struct TextListView: View { var body: some View { List { ForEach([

3.5K20

SwiftUI 与 Core Data —— 数据获取

SwiftUI 与 Core Data —— 问题[2]SwiftUI 与 Core Data —— 数据定义[3]访问我的博客 www.fatbobman.com[4] 可以获得更好的阅读体验以及最新的更新内容...不可在 update 方法中同步地改变引发视图更新的数据与 SwiftUI 在视图中更新 Source of truth 的逻辑一致,在一个视图更新周期中,不能对 Source of truth 再度更新...ID 顺序或数量没有发生变化时,即使数据的属性值发生变化,MockableFetchRequest 也不会更新数据集。...( 在 @State 中持有引用 ),便可以达成如下目的:1、让数据的生命周期与视图生存期一致;2、数据可更改;3、更改数据不会引发视图更新。...>(nil) func update() { ... // fetcher 是可持久的,修改 fetcher.value 不会引发视图更新

4.6K30

在 Text 中实现基于关键字的搜索和定位

访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验以及最新的更新内容。...请阅读 优化在 SwiftUI List 中显示大数据集的响应效率[6] 以及 避免 SwiftUI 视图的重复计算[7] 两篇文章,了解更多有关性能优化方面的内容通过 currentPostion 获取需要滚动到的...了解更多内容,请阅读 SwiftUI 视图的生命周期研究[9] 一文优先定位于最靠近屏幕中央的搜索结果:/// 从 List 当前显示中的 transcription 中就近选择 match 的 positionprivate...使用 safeAreaInset ,我们可以将搜索栏的区域设置为 List 下方的安全区域,这样既可以实现类似 Tab 覆盖 List 的效果,同时也不会遮盖 List 最下方的数据。...List 中显示大数据集的响应效率: https://www.fatbobman.com/posts/optimize_the_response_efficiency_of_List/[7] 避免 SwiftUI

4.2K30

苹果全新UI框架来了!可视化编程,自动化减少20%代码量

SwiftUI还提供对动态类型、暗黑模式、本地化和可访问性的自动支持。 SwiftUI更新了什么? 此次更新主要有5点: 声明式:更加易读的代码。...一致性:这意味着Swift和Objective-C之间不会再看到奇怪的错误,或者非常旧的API与新API的混合 简洁:可以节省10%-20%的代码量 如果你刚刚接触SwiftUI,刚开始你可能需要适应一下...而SwiftUI通过4种方式,解决了上述问题: 用一个新的声明式UI结构,定义了的布局的外观和工作方式 更新UI预览会自动生成新的Swift代码,反之,更改Swift代码也会更新UI预览 Swift中的任何绑定例如有效的...outlets和操作,都会在编译时进行检查,因此在运行时不会出现UI失败的风险 虽然背后使用来自UIKit和AppKit的控件,但SwiftUI凌驾于二者之上,能够有效地使底层UI框架成为一个实现细节,...使用SwiftUI之前要注意的事情 首先,SwiftUI目前只支持10.15 beta以及更新的macOS系统,当然10.15 beta已经是目前最新了。 其次一些可能出现的小问题也是需要注意的。

5.3K20

SwiftUI 视图的生命周期研究

类型树在编译后就已经固定,在 app 的生命周期内都不会发生变化。 视图值树 在 SwiftUI 中,视图是状态的函数[2]。...当 State 发生变化后,SwiftUI 会生成一棵新的视图值树(Source of truth 没有发生变化的节点,不会重新计算,直接使用旧值),并同老的视图值树进行比对,SwiftUI 将对其中有变化的部分重新布局渲染...这样即使 SwiftUI 创建了多余的实例,也不会加大系统的负担。 注册数据依赖 在 SwiftUI 中,状态(或者说是数据)是驱动 UI 的动力。...比如在 List 和 LazyVStack 中,Cell 视图在创建之后即使滚动出屏幕不参与布局与渲染,但 SwiftUI 仍会保留这些视图的数据,直到 List 或 LazyVStack 被销毁。...•在 List 和 LazyVStack 中,SwiftUI 出于效率的考虑,即使 Cell 视图移出显示范围,它的视图仍将保留在视图值树上(视图仍将存续)。

4.3K30
领券