Issue #626
SwiftUI does not trigger onAppear and onDisappear like we expect. We can use NSView to trigger
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import SwiftUI
struct AppearAware: NSViewRepresentable { var onAppear: () -> Void
func makeNSView(context: NSViewRepresentableContext<AppearAware>) -> AwareView { let view = AwareView() view.onAppear = onAppear return view }
func updateNSView(_ nsView: AwareView, context: NSViewRepresentableContext<AppearAware>) {
} }
final class AwareView: NSView { private var trigged: Bool = false var onAppear: () -> Void = {}
override func viewDidMoveToSuperview() { super.viewDidMoveToSuperview()
guard !trigged else { return } trigged = true onAppear() } }
|
Then we can use it as an hidden view, like in a ZStack
1 2 3 4 5 6 7 8
| ZStack { AppearAware(onAppear: { LocalImageCache.shared.load(url: url) { image in self.image = image } }) Image(image) }
|