I am trying to replace the navigation tab bar with a custom bottom toolbar when a view enters edit mode. Currently, I am using the following code to achieve this:
content
.toolbar(isEditing ? .hidden : .visible, for: .tabBar)
. toolbar(isEditing ? .visible : .hidden, for: .bottomBar)
However, this results in a janky animation. When the bottom bar appears, it animates in above (in contrast to in place of) the tab bar, then "jumps" back down to the correct offset without animation. I had to workaround this by delaying the appearance of bottom bar by 0.3s. I am already using withAnimation().
Is this a bug or am I using the APIs incorrectly? Is there a more seamless way to achieve this switching effect other than delaying the bottom bar? Thanks!
@NSCruiser Here's an example of how to go about it:
struct ContentView: View {
@State private var isEditing = false
var body: some View {
NavigationStack {
TabView {
Tab("Received", systemImage: "tray.and.arrow.down.fill") {
Button("toogle") {
isEditing.toggle()
}
.toolbar(isEditing ? .hidden : .visible, for: .tabBar)
}
.badge(2)
Tab("Sent", systemImage: "tray.and.arrow.up.fill") {
Color.blue
}
Tab("Account", systemImage: "person.crop.circle.fill") {
Color.green
}
.badge("!")
}
.toolbar(isEditing ? .visible : .hidden, for: .bottomBar)
.animation(.easeIn, value: isEditing)
.toolbar {
ToolbarItem(placement: .bottomBar) {
Text("hello world")
}
}
}
}
}