zijievv / swiftui-tab-bar

A highly customizable tab bar view made in SwiftUI
Apache License 2.0
97 stars 10 forks source link

Using UIViewControllerRepresentable means view lifecycle functions do not properly work because of how views are now disabled and hidden but still shown #8

Closed bryan1anderson closed 4 months ago

bryan1anderson commented 1 year ago

You recently implemented a change that made views no longer disappear so that the views were not completely deconstructed and reconstructed each time you switched tabs.

This has unforeseen consequences such as the fact that viewDidAppear does not get called when you switch to a tab. In my own project I implemented an EnvironmentKey that passed down "isViewVisible" that then manually called viewDidAppear on a UIViewControllerRepresentable.

However, viewDidAppear still gets called on all the view controllers on init of the tab bar, despite them not being shown.

zijievv commented 1 year ago

Yes, "disabled" views are simply hidden, and there will be problems when calling viewDidAppear. However, I haven't found a way to resolve the issue. View states cannot persist without hiding views using opacity(_:).

I just want to use pure SwiftUI to implement the TabBar. For now, the only way is to pass a willSelect action into tabItem(_:label:willSelect:) to manually call functions.

Do you have any solutions?