3 ms·
I primarily do iOS and iPadOS, but it’s far easier to bridge the gap between all the platforms than the experience I had in the past with UIKit/AppKit. My last
by sandoze 2y ago
I primarily do iOS and iPadOS, but it’s far easier to bridge the gap between all the platforms than the experience I had in the past with UIKit/AppKit. My last MacOS app sadly does not do infinite scrolling.
Off the top of my head, I’d consider the approach. Is it a ScrollView? A LazyVStack? What do your view redraws look like?
Anyone working with Swift Strings back in Swift 1+2 was in for some shockingly bad performance. We adopt, we adapt, and the framework matures.
- wahnfrieden 2y agoLazyVStack and ScrollView don't scale (no cell reuse / no unloading). The only option is List which has different behaviors and performance characteristics on macOS including issues with eager rendering
- sandoze 2y agoTo be fair a LazyVStack handles cell reuse and unloading automatically which is why offscreen content that was previously viewed further back on the list will only maintain the root level state (children in the view hierarchy may and will lose state in order to save memory and energy). How that data is loaded and how you key off Identifiable is also important. Apple’s own documentation discusses this in detail and for large data sets recommends the Lazy approach. If you’re using List you’re in for some issues.
- wahnfrieden 2y agoWhere do you see that it does cell reuse? It does not... Their docs only talk about lazy loading, not reuse or unloading, eg: https://developer.apple.com/documentation/swiftui/creating-performant-scrollable-stacks https://developer.apple.com/documentation/swiftui/creating-p... This is also why LazyVGrid/LazyHGrid are unusable as replacements for UICollectionView Yes you can replace SwiftUI with UIKit + AppKit - replace the navigation, the text rendering, the text editing, the collection views, etc. edit: Your link is all about how to use List
- kridsdale1 2y agoWell the good news is you can keep using UICollectionView or MyFancyReuseView anywhere in the stack or tree of SwiftUI.
- sandoze 2y agoI’m on a phone which means digging through Apple docs or WWDC-ascii isn’t fun. But for my recent Insta-like infinite feed on iOS this was very helpful: https://fatbobman.com/en/posts/tips-and-considerations-for-using-lazy-containers-in-swiftui/ https://fatbobman.com/en/posts/tips-and-considerations-for-u...
- wahnfrieden 2y agoYour link is all about how to use List Also... Funny that I'm getting downvoted for correctly pointing out that LazyVStack doesn't reuse or unload views. It's so obvious that they should, that no one can believe they don't.
- sandoze 2y agoThere are additional links and details about LazyVStack highlighted in the content. I thought the top level article focused on Lists would be more helpful for you.
- wahnfrieden 2y agoI followed those links and it agrees with my initial post that LazyVStack does not reuse or unload, and confirms that the only choice for large data sets is List (focused on iOS)