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

SwiftUI ScrollView inside列表具有可怕的性能影响

。在使用SwiftUI开发应用程序时,如果在列表中嵌套了一个ScrollView,可能会导致性能下降的问题。这是因为ScrollView在滚动时会立即加载所有的子视图,而不管它们是否在屏幕上可见。当列表中的数据量较大时,这种行为会导致内存占用增加、滚动卡顿等问题。

为了解决这个性能问题,可以采取以下几种方法:

  1. 使用LazyVStack或LazyHStack替代ScrollView:LazyVStack和LazyHStack是SwiftUI中的新视图容器,它们只会在需要时才加载子视图,可以提高性能并减少内存占用。将ScrollView替换为LazyVStack或LazyHStack可以解决性能问题。
  2. 使用UITableView或UICollectionView:如果性能问题无法通过LazyVStack或LazyHStack解决,可以考虑使用UIKit中的UITableView或UICollectionView来替代列表。这些UIKit组件在处理大量数据时具有更好的性能和内存管理能力。
  3. 优化子视图:如果无法避免使用ScrollView,可以尝试优化子视图的加载和渲染过程。例如,可以使用懒加载来延迟子视图的加载,或者使用异步加载来提高滚动的流畅性。

总结起来,ScrollView inside列表的性能问题可以通过使用LazyVStack或LazyHStack、替换为UITableView或UICollectionView,以及优化子视图的加载和渲染来解决。这些方法可以提高应用程序的性能并改善用户体验。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobile
  • 腾讯云服务器(云服务器CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(云数据库MySQL):https://cloud.tencent.com/product/cdb
  • 腾讯云存储(对象存储COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(腾讯云AI):https://cloud.tencent.com/product/ai
  • 腾讯云区块链(腾讯云TBaaS):https://cloud.tencent.com/product/tbaas
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入了解 SwiftUI 5 中 ScrollView 新功能

SwiftUI 5.0 中,苹果大幅强化了 ScrollView 功能。新增了大量新颖、完善 API。本文将对这些新功能进行介绍,希望能够让它们更多、更早帮助到有需要开发者。...它只会影响最近一个视图。 对于全面屏额外安全区域,safeAreaInset 和 safeAreaPadding 处理逻辑不一致。...(视图标识) 不支持锚点设定,固定锚点为子视图 center 正如 优化在 SwiftUI List 中显示大数据集响应效率[6] 一文所提到,当数据集很大时,也会出现性能问题。...就我个人而言,在 SwiftUI 5 中,ScrollView 原生方案已经能够满足大多数需求,因此我们将看到更多人采用 ScrollView + LazyStack 组合方式。...欢迎你通过 Twitter[8]、 Discord 频道[9] 或博客留言板与我进行交流。 订阅下方 邮件列表[10],可以及时获得每周最新文章。

67720

GeometryReader :好东西还是坏东西?

比如,对于 VStack ,它会在垂直维度上,分别向子视图发送具有明确值建议尺寸、未指定建议尺寸、最大建议尺寸以及最小建议尺寸信息,并获得子视图在不同建议尺寸下需求尺寸。...GeometryReader 性能问题 只要了解 GeometryReader 获取几何信息时机,就能理解其对性能影响。...由于早期 SwiftUI 缺少了 LazyGrid 等布局容器,开发者只能通过 GeometryReader 来实现各种自定义布局。当视图数量较多时,这将会导致严重性能问题。...自从 SwiftUI 补充了一些之前缺失布局容器后,GeometryReader 对性能大规模影响已经有所减轻。特别是在允许自定义符合 Layout 协议布局容器后,上述问题已基本解决。...为了进一步减少 GeometryReader 对性能影响,我们需要注意以下两点: 只让少数视图受到几何信息变化影响 仅传递所需几何信息 以上两点符合我们优化 SwiftUI 视图性能一贯原则,即控制状态变化影响范围

46270

如何判断 ScrollView、List 是否正在滚动中

欢迎大家在 Discord 频道[2] 中进行更多地交流判断一个可滚动控件( ScrollView、List )是否处于滚动状态在某些场景下具有重要作用。...比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动时,自动关闭已经打开侧滑菜单。遗憾是,SwiftUI 并没有提供这方面的 API 。...本文将介绍几种在 SwiftUI 中获取当前滚动状态方法,每种方法都有各自优势和局限性。...目前 SwiftUI 在内部实现上去 UIKit( AppKit )化很明显,比如,本节介绍方法在 SwiftUI 4.0 中已经失效方法二:Runloop我第一次接触 Runloop 是在学习 Combine...每周也会对当周博客上新文章以及在 Twitter 上发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅下方 邮件列表[9],可以及时获得每周 Tips 汇总。

3.7K40

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

视图性能优化Q:面对复杂用户界面时,控制视图中更新范围最佳做法是什么( 以避免不需要转发以及重复计算 )。...如何减少主线程负担Q:如何避免所有操作都被放置在主线上?任何标记 @Published 变量都应该在主线上被修改,所以应该使用 @MainActor 。但任何触及该属性代码都将被影响。...创建从底部开始滚动视图Q:我如何实现一个在底部对齐滚动视图,在 macOS 上会不会有糟糕性能?...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 中显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...在 SwiftUI 中,有一个从第一版开始就存在但尚未公开SwiftUI 实现滚动容器 —— _ScrollView

14.7K30

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

这从根本上解决了当前影响 SwiftUI 应用( 过渡计算 )效率问题。让开发者可以更加自由来设计数据结构以及随心所欲注入数据源。 不过很遗憾,这项新特性只能在 SwiftUI 5 上实现。...大幅改善了 ScrollView 控制力 本次升级中,为 ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 在视图进入后...在过去几年,苹果推出新技术层出不穷,开发者要不断学习与适应,这无形中也增加了开发成本与风险。虽然苹果新技术普遍都具有实用价值,但在追新与稳定之间,开发者也需要慎重地权衡。...欢迎你通过 Twitter[5]、 Discord 频道[6] 或博客留言板与我进行交流。 订阅下方 邮件列表[7],可以及时获得每周最新文章。...s=20 [5] 邮件列表: https://artisanal-knitter-2544.ck.page/d3591dd1e7

35010

老人新兵 —— 一款 iOS APP 开发手记

首先在 iOS 13 下它自带云同步非常吸引我( 基本免费、性价比超高 ),另外由于 Core Data 并非一个 ORM( 应该称其为对象图管理框架 ),在性能及安全等方面还有不少其他优势。...,直接会回到顶部由于切换重置,在复杂页面加载时效率低到可怕。...ScrollViewSwiftUI 中 ScrollView 沿袭了其他 SwiftUI 控件特点,使用起来非常轻巧,但几乎不提供额外控制选项。...如果非要在 init 中使用类似 UITableView.appearance 之类方式进行设定的话,单个 view 中设定会影响整个 app( 除非能够很好地控制该 view 初始化和销毁 )。...每周也会对当周博客上新文章以及在 Twitter 上发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅下方 邮件列表[3],可以及时获得每周 Tips 汇总。

2.5K40

【HarmonyOS 专题】07 简单了解 ScrollView 滑动组件

和尚在前面学习 Image 时当前屏幕展示不全,需要用到 ScrollView 滑动组件,和尚今天进一步学习一下; ScrollView ScrollView 是一种可滑动组件,可以通过滑动在有限空间内展示更多空间组件...;ScrollView 继承自 StackLayout;与 Android 使用方法一样,在 ScrollView 使用时,内部仅支持一个元素,即需要将滑动展示元素放在一个 Layout 布局内; <...,但是可以通过 ScrollView 内部 Layout 设置水平滑动或竖直滑动;注意,当设置水平滑动时,内部 Layout 宽度尽量不要使用 match_parent 影响滑动触发; <ScrollView...,常用于自定义滑动列表; <ScrollView xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_content...(500); } }); 和尚对 ScrollView 高级自定义方式还不够深入,后期会在自定义滑动列表组件时尝试更多回弹效果和速率方面的属性;如有错误,请多多指导!

62610

掌握 SwiftUI Safe Area

我们将 ignoresSafeArea 添加到 ZStack 之后: ZStack { ...}.ignoresSafeArea() 此时,背景充满了屏幕,也不受软键盘弹出影响了。...使用 safeAreaInset 扩展安全区域 在 SwiftUI 中,所有基于 UIScrollView 组件(ScrollView、List、Form),在默认情况下都会充满整个屏幕,但仍可确保我们可以在安全区域内看到所有的内容...safeAreaInsetList2 遗憾是,在 iOS 15 之前,SwiftUI 并没有提供调整视图安全区手段,如果我们想通过 SwiftUI 手段创建一个自定义 Tabbar 时,列表中最后内容将被...表现正常),无法将列表最后内容全部显示完整。...尽管使用 safeAreaInset 为列表在底部添加状态栏或自定义 TabBar 非常方便,但如果你列表中使用了 TextField,情况将变得很麻烦。

7.5K31

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

但是,SwiftUI一些系统控件并没有完全遵循响应式设计原则,由此在某些情况下会出现严重错误,影响用户体验,并使开发者无所适从。...只有直接修改 path,SwiftUI 才能表现像一个真正响应式编程框架。...它复现条件如下:iOS 16 系统,在真机或模拟器上测试点击视图列表按钮,可以进入下一级视图。...如果我们认为问题出在这里,就需要使用编程式导航方式来调整代码。为了不影响用户使用习惯,我们禁用了 NavigationStack 自带 Back 按钮。...希望 SwiftUI 开发组能尽早重视这些问题。欢迎你通过 Twitter、 Discord 频道 或博客留言板与我进行交流。订阅下方 邮件列表,可以及时获得每周最新文章。

589110

SwiftUI 方式进行布局

最近时常有朋友反映,尽管 SwiftUI 布局系统学习门槛很低,但当真正面对要求较高设计需求时,好像又无从下手。SwiftUI 真的具备创建复杂用户界面的能力吗?...本文将通过用多种手段完成同一需求方式,展示 SwiftUI 布局系统强大与灵活,并通过这些示例让开发者对 SwiftUI 布局逻辑有更多认识和理解。 可在 此处 获取本文代码。...padding 是在布局层面进行调整,添加 padding 后视图,同时也会对其他视图布局产生影响。...ScrollView 会使用父视图给定全部建议尺寸创建滚动区域,但在询问其子视图需求尺寸时只会提供理想尺寸。...同时也欢迎你通过 Twitter、 Discord 频道 或博客留言板与我进行交流。 订阅下方 邮件列表,可以及时获得每周 Tips 汇总。

4.7K80

解析SwiftUI布局细节(二)循环轮播+复杂布局

我们看看最底层代码先: NavigationView{ ScrollView(showsIndicators:false,content: {...HomeBannerView() .environmentObject(homeViewModel) /// 服务列表...3、再提一点关于上面说滚动视图,在UIKit中我们可以用UICollectionView搞定一切,但是在SwiftUI中没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...方式去实现,很多同行有说目前来看SwiftUIList在数据量大情况下性能不是特别好,采用ScrollView是个不错方式,而且也很容易构建出来,并不是说每一个Item位置都需要你去计算,...区别于我们UIKit创建方式,SwiftUI对它进行了简化,具体创建如下: /// SwiftUI对定时器简化,可以进去看看具体参数定义 private let timer = Timer.publish

11.8K20

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

但是,SwiftUI一些系统控件并没有完全遵循响应式设计原则,由此在某些情况下会出现严重错误,影响用户体验,并使开发者无所适从。...本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致严重错误,并提供相应解决方案。...只有直接修改 path,SwiftUI 才能表现像一个真正响应式编程框架。...它复现条件如下: iOS 16 系统,在真机或模拟器上测试 点击视图列表按钮,可以进入下一级视图。...如果我们认为问题出在这里,就需要使用编程式导航方式来调整代码。 为了不影响用户使用习惯,我们禁用了 NavigationStack 自带 Back 按钮。

26720

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

SwiftUI 如果说从 SwiftUI 1.0 到 4.0 每年升级是一种小修小补行为,那么今年苹果在 SwiftUI 5.0 上做出努力至少算得上是中期改款了。...今年 SwiftUI 提升相当大,有些改动可以视为革命性变化。...这从根本上解决了当前影响 SwiftUI 应用( 过渡计算 )效率问题。让开发者可以更加自由来设计数据结构以及随心所欲注入数据源。 不过很遗憾,这项新特性只能在 SwiftUI 5 上实现。...大幅改善了 ScrollView 控制力 本次升级中,为 ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 在视图进入后...在过去几年,苹果推出新技术层出不穷,开发者要不断学习与适应,这无形中也增加了开发成本与风险。虽然苹果新技术普遍都具有实用价值,但在追新与稳定之间,开发者也需要慎重地权衡。

1.1K20

肘子 Swift 周报 #036 | WWDC 2024 观后感

SwiftUI 初次接触 SwiftUI 今年新特性时,我并未感到特别兴奋。然而,做了更多研究后,我意识到此次更新在 SwiftUI 发展史上将具有十分重要意义。...从这个版本开始,SwiftUI 开发团队似乎找到了快速发展 SwiftUI 正确路径,探索出了在保持声明式框架特性同时,有效提升其表现力方法。...前一期内容|全部周报列表 与 WWDC 2024 新功能有关文章 SwiftData SwiftData in WWDC 2024:革命仍在继续、稳定还需时日[3] by Fatbobman( 东坡肘子...)[4] SwiftUI ScrollView, but better[5] by Alex Logan[6] Hello Adaptive Tab Views[7] by Alex Logan[8]...in WWDC 2024:革命仍在继续、稳定还需时日: https://t.ly/c0Cpe [4] Fatbobman( 东坡肘子 ): https://x.com/fatbobman [5] ScrollView

9410

Android 简单实现控件滑动固定效果

控件滑动固定 实现思路:   首先我们需要实时获取滑动Y值scrollDistanceY(可以理解为滑动了距离),可以通过ScrollViewgetScrollY();方法来获取。...我们继承ScrollView重写Touch方法,随触摸事件反馈scrollDistanceY。需要特殊处理手指离开后屏幕还在滑动导致 scrollDistanceY改变情况。   ...在xml布局中,绿色固定布局View我们需要写两个,一个与头部布局重合,位于APP顶部,另一个与列表中。...* 这是一个能够实时向主View提供滑动距离Y值ScrollView(滑动高度) * 能够运用此ScrollView实现在内部View固定顶部布局需求 */ public class FixedHeadScrollView...xml中,外部固定布局一定要放在scrollView外面。 记得处理手指离开屏幕后,界面仍然在滑动,导致外层固定布局显示隐藏控制有误。

2.1K30

SwiftUI 视图生命周期研究

因此,我认为应该以视图是否参与或影响了其父视图布局作为 onAppear 和 onDisappear 触发条件。如果用此条件来解释上面的情况便完全可以说通了。...•ZStack 中,即使层被隐藏,但被隐藏层也必然会影响父视图 ZStack 布局规划。...因此,当 Cell 视图出现在显示范围内(影响容器布局)会触发 onAppear,移出显示范围(不影响容器布局)会触发 onDisappar。在其存续期内可以反复触发。...•ScrollView + VStack 中,即使 Cell 视图没有出现在可见区域,但它在最开始就会参与容器布局,因此会在创建初始便触发 onAppear,但无论如何滚动,所有的 Cell 视图始终会参与布局...父视图恰恰是以该视图是否影响自身布局为依据,来调用 onAppear 和 onDisappear 内闭包,这也是为什么这两个修饰器作用范围是父视图而不是视图本身。

4.3K30

肘子 Swift 周报 #031 |苹果用 M4 来展现拥抱 AI 决心

据网络上流出跑分数据显示,M4 在性能上大幅超越了 M2 甚至 M3 芯片。 苹果宣称,M4 芯片在机器学习性能上有显著提升,特别大幅增强了神经处理单元(NPU)性能。...具体 AI 性能表现如何,可能还需与 WWDC 2024 中发布新系统和新 API 配合才能完全展现。...我迫切希望了解苹果如何在 AI 性能、能耗、隐私、开发便利性和使用体验等方面找到平衡。...前一期内容|全部周报列表 原创 精通 SwiftUI containerRelativeFrame 修饰器[3] Fatbobman( 东坡肘子 )[4] containerRelativeFrame...修饰器从其所作用视图开始,沿视图层次结构向上寻找最近符合容器列表容器。

13810
领券